Elasticsearch 包括两种结构化语句: 结构化查询( Query DSL) 和结构化过滤( Filter DSL) 。 查询与过滤语句非常相似, 但是它们由于使用目的不同而稍有差异。
原则上来说, 使用查询语句做全文本搜索或其他需要进行相关性评分的时候, 剩下的全部用过滤语句
结构化过滤不会计算分值,结构化查询会计算分值(__score) 。结构化查询默认按照分值排序,结构化过滤却不会。所以单独使用结构化过滤时有时会出现匹配度较高的却不在前面显示的原因就是单独使用结构化过滤引起的。
一般查询_search 都是用如下结构(查询过滤混合使用)
GET movie_index_0213/movie/_search
{
"query": {#query上下文
"bool": {
"filter": [
{"range": {
"doubanScore": {
"gte": 5,
"lte": 10
}
}}
],"must": [
{"match": {
"name": "incident red sea"
}}
]
}
}
}
结构化查询( Query DSL)包括如下几种类型
t