(转)elasticsearch 常见几种查询方式

原文:https://zhuanlan.zhihu.com/p/344773076

1.精准查询term

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

1.term单值

字段只有一个值时候,用term关键词查询

 

 

优化:进一步优化查询,因为是精准查询,不需要查询进行评分计算,只希望对文档进行包括或排除的计算,所以我们会使用 constant_score 查询以非评分模式来执行 term 查询并以一作为统一评分。

 

 

2.terms多值

字段有一多个值时候,用terms关键词查询,后跟数组

优化同上

3.term多字段

 

 

2.匹配查询match

区别:match和term的区别是,match查询的时候,elasticsearch会根据你给定的字段提供合适的分析器,而term查询不会有分析器分析的过程,match查询相当于模糊匹配,只包含其中一部分关键词就行

1.match

进行full text search或者exact value(非string字段或not_analyzed的字段),进行匹配

2.match_all

{ "match_all": {}} 匹配所有的, 当不给查询条件时,默认全查

3.multi_match

同时对查询的关键词,多个字段同时进行匹配,即多个字段是AND的关系

 

 

深入:同时field还支持更为丰富的查询

在在fields中,按brandName(品牌名)、sortName(分类名)、productName(商品名)productKeyword(商品关键字),搜索“牛仔 弹力”关键词,brandName源值、拼音值、关键字值都是100分,sortName源值、拼音值80分,productName源值60分,productKeyword值20分,分值由高到低优先级搜索

 

 

4.match_phrase

match_phrase查询分析文本,并从分析文本中创建短语查询。

类似 match 查询, match_phrase 查询首先将查询字符串解析成一个词项列表,然后对这些词项进行搜索,但只保留那些包含 全部 搜索词项,且 位置与搜索词项相同的文档

 

 

 

 

3.bool查询

bool查询包含四种操作符,分别是must,should,must_not,query。它们均是一种数组,数组里面是对应的判断条件

1.must:

必须匹配,与and等价。贡献算分

2.must_not:

必须不匹配,与not等价,常过滤子句用,但不贡献算分

3.should:

选择性匹配,至少满足一条,与 OR 等价。贡献算分

4.filter:

过滤子句,必须匹配,但不贡献算分

 

4.filter查询

过滤器,会查询对结果进行缓存,不会计算相关度,避免计算分值,执行速度非常快。

filter也常和range范围查询一起结合使用,range范围可供组合的选项

gt : 大于

lt : 小于

gte : 大于等于

lte :小于等于

 

 

 

 

 

posted @ 2024-06-25 17:02  liujiacai  阅读(3)  评论(0编辑  收藏  举报