Bool Query
一个bool查询是一个或多个查询子句的组合
must | 必须匹配,贡献算分 |
---|---|
should | 选择性匹配,贡献算分 |
must_not | Filter Context,必须不能匹配 |
filter | Filter Context,必须匹配,但是不贡献算分 |
- Boosting Query
- Disjunction Max Query - 将任何与任一查询匹配的文档作为结果返回。菜啊用字段上最匹配的评分为最终评分
- tie_breaker:是一个介于0-1之间的浮点数,0代表使用最佳匹配;1代表所有语句同等重要
- 获得最佳匹配语句的评分_score
- 将其他匹配语句的评分与tie_breaker相乘
- 对以上评分求和并规范化
- tie_breaker:是一个介于0-1之间的浮点数,0代表使用最佳匹配;1代表所有语句同等重要
GET accounts/_search{
"query": {
"dis_max": {
"tie_breaker": 0.7,
"boost": 1.2,
"queries": [
{ "match": { "firstname": "Strong" } },
{ "match": { "lastname": "Strong" } } ] } }}
Fuzzy Query
- fuzzy query是一种模糊索索,其原理是查询词与词之间出存在的相似度,在计算两个单词之间的相似度之前就需要了解Levenshtein Edit Distance(做莱文斯坦距离),它是编辑距离的一种。
- 指两个字串之间,由一个字符串转成另一个字符串所需的最少编辑操作次数。
允许的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符
示例
例如,单词 “ski”变为 “sky”,的编辑距离为 1,这里使用“y”替换掉了“i”
POST fuzzyIndex/_search
{
"query": {
"match": {
"content": {
"query": "ski",
"fuzziness": 1
}
}
}
}
AUTO设置
在fuzziness参数还有一种配置方法是ATUO,它会根据词的长度计算编辑距离,形式为AUTO:[low],[high],两个参数分别表示短距离参数和长距离参数。如果没有指定,默认值是 AUTO:3,6
- 当短距离参数和长距离参数表示为 3和6 的时候,其要传达的意思如下:
- 单词长度为 0 到 2 之间时,fuzziness=0,表示必须要精确匹配。
- 单词长度 3 到 5 个字母时,fuzziness=1。
- 单词长度大于 5 个字母时,fuzziness=2。
- 最佳实践: fuzziness 在绝大多数场合都应该设置成 AUTO。