赞
踩
Elasticsearch 提供了一种基于JSON 的查询 DSL (Domain Specific Language) 来定义查询。可以把查询 DSL 看作是查询的 AST(Abstract Syntax Tree),由两种类型的子句组成:
叶子节点查询: 叶子查询子句在特定字段中查找特定值,例如 match
,term
,range
查询。这类查询可以单独使用
复合查询子句: 复合查询可以包裹 叶子节点查询 或者 复合查询子句,用于组合多个查询( bool
,dis_max
)或改变查询行为(constant_score
)。
分别描述了什么是 相关性评分(Relevance scores)、相关性查询(Query context)、过滤查询(Filter context)
Filter context:
bool
中的 filter
、must_not
constant_score
中的 filter
filter
聚合复合查询
用于组合 must
,should
,must_not
,filter
,查询,其中 must
,should
作为相关性查询,must_not
,filter
作为过滤查询,不参与评分
调整 相关性评分的查询,不调整 positive
匹配文档的评分,降低 negative
匹配文档的评分降低倍数 由 negative_boost
[0 -1.0]参数决定
通过 constant_score
查询返回的文档都具有相同的评分,评分为 boost
所给定的值
GET /_search
{
"query": {
"constant_score": {
"filter": {
"term": { "user.id": "kimchy" }
},
"boost": 1.2
}
}
}
queries
中包含多个查询,取其中 最高的相关性评分 评分作为文档的相关性评分,或取 最高的相关性评分 加上 其他经过调整的查询结果的相关性评分 作为文档的相关性评分。
queries
: 包含多个查询字句,返回的文档匹配一个或多个查询字句
tie_breaker
: 调整除 最高的相关性评分 以外的其他相关性评分的系数
使用 function_score
可以修改查询检索到的文档的得分。
相关性查询(Query context),即 field
定义为 text
类型的查询。查询结果是 返回结果和查询的相似程度,相似程度高的排在返回结果的更前面,相关性查询可以用下面的方法
根据匹配词的顺序和邻近程度返回文档。(没看懂,先放着)
分词匹配查询,如 示例 所示,对 this is a test
进行分词,匹配 索引中的 message
字段。
示例:
GET /_search
{
"query": {
"match": {
"message": "this is a test"
}
}
}
match_bool_prefix
查询会被解析为由 bool
查询组合成的查询语句,除最后一个 token
使用 prefix
查询以外,其他的 token
使用 term
查询。
示例:
GET /_search
{
"query": {
"match_bool_prefix" : {
"message" : "quick brown f"
}
}
}
被转换为
GET /_search
{
"query": {
"bool" : {
"should": [
{ "term": { "message": "quick" }},
{ "term": { "message": "brown" }},
{ "prefix": { "message": "f"}}
]
}
}
}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。