在Elasticsearch中,有Query和Filter两种不同的Context
- QueryContext:相关性算分
- FilterContext:不需要算分(YesorNo),可以利⽤Cache,获得更好的性能
一、一个条件组合查询例子:
假设要搜索⼀本电影,包含了以下⼀些条件:
●评论中包含了Guitar,⽤户打分⾼于3分,同时上映⽇期要在1993与2000年之间
检索逻辑解析:
这个搜索其实包含了3段逻辑,针对不同的字段
●评论字段中要包含Guitar / ⽤户评分⼤于3 / 上映⽇期⽇期需要在给定的范围
●同时包含这三个逻辑,并且有⽐较好的性能?
●复合查询:boolQuery
二、bool查询
一个bool查询,是一个或者多个查询子句的组合
- 总共包含四种子句。 其中2种会影响算分,2种不会影响算分
-
相关性并不只是全⽂本检索的专利。也适⽤于yes|no的⼦句,匹配的⼦句越多,相关性评分越⾼。如果多条查询⼦句被合并为⼀条复合查询语句,⽐如bool查询,则每个查询⼦句计算得出的评分会被合并到总的相关性评分中。
image.png
2.1 bool查询语法

image.png
三、如何解决结构化查询 --- “包含而不是相等”的问题

增加count字段,使用bool查询解决,从业务⻆度,按需改进Elasticsearch数据模型

image.png
四、Filter Content -- 不影响算分

image.png
五、Query Content -- 影响算分

image.png
六、bool嵌套

image.png
七、查询语句的结构,会对相关度算分产生影响
- 同一层级下的竞争嵌套,具有相同的权重
- 内层嵌套权重的总和等于外层同一级的
-
通过嵌套bool查询,可以改变对算分的影响
image.png
八、Boosting是控制相关度的一种手段
- 索引,字段 或是查询子条件
- 参数 boost的含义
●当boost> 1时,打分的相关度相对性提升
●当0< boost < 1时,打分的权重相对性降低
●当boost< 0时,贡献负分

image.png
九、Boosting Query 例子
要求苹果公司的产品信息优先

image.png
两种实现查询的方式

image.png
相关阅读

