FS1360472174 / ElasticsearchLearning

learn Elasticsearch
0 stars 0 forks source link

DSL 查询语句 #5

Open FS1360472174 opened 7 years ago

FS1360472174 commented 7 years ago

对于结构化查询,需要去查找准确值,这时候需要使用过滤器, 因为过滤器比较快,不用去计算匹配的相关性,而且容易被缓存

  1. term 过滤器(多个准确值是terms) 处理数字,布尔值,日期,文本 完全匹配,不进行分词分析。过滤器查询需要包到一个查询结构体中 SELECT doc from user where age = 20 { "query": { "filtered" : { "query": { "match_all": {} }, "term": { "age": 20 } } } } match_all是默认行为,可以省略掉 执行filtered查询时,filter会比query早执行,结果字节集会被传给query来跳过已经被排除的文档。

这边的准确值含义和SQL中的意义还是不同,对于String类型的字段,它表示的还是 字符串匹配,是including而不是equal 所以通常查询过程中还是需要其他的字段匹配

  1. bool联合查询: must,should,must_not

过滤顺序 https://es.xiaoleilu.com/080_Structured_Search/45_filter_order.html

FS1360472174 commented 7 years ago

多字段搜索

  1. 有时候会看到有些字句match搜索被嵌套,而不是同级调用, 这是因为所有同级的得分占比一样,将有些字句嵌套,是避免将其他查询权重 削减

2.可以通过boost参数,提高权重

{ "match": { <1> "author": { "query": "Leo Tolstoy", "boost": 2 }}},

  1. 跨字段对象查询

“multi_match” : { "query": "", "type": "", "fields": ["street", "city"] }