美文网首页
单字符串多字段查询 Dis Max Query

单字符串多字段查询 Dis Max Query

作者: 滴流乱转的小胖子 | 来源:发表于2020-07-25 21:50 被阅读0次

一、含义

单字符串查询:
Google 只提供一个输入框,查询相关的多个字段
支持按照价格,时间等进行过滤

二、单字符串查询实例

PUT /blogs/_doc/1
{
    "title": "Quick brown rabbits",
    "body":  "Brown rabbits are commonly seen."
}

PUT /blogs/_doc/2
{
    "title": "Keeping pets healthy",
    "body":  "My quick brown fox eats rabbits on a regular basis."
}

POST /blogs/_search
{
    "query": {
        "bool": {
            "should": [
                { "match": { "title": "Brown fox" }},
                { "match": { "body":  "Brown fox" }}
            ]
        }
    }
}

查询前预测分析:

  • 博客标题
    文档1中出现 “Brown”
  • 博客内容
    文档1中出现了“Brown”
    “Brown fox” 在文档2中全部出现,并且保持一致的顺序(目测相关性最高)

三、算分过程

  • 查询should 语句中的两个查询
  • 加和两个查询的评分
  • 乘以匹配语句的总数
  • 除以所有语句的总数

四、查询结果及分析

文档1中 只有title中含有Brown,文档2中title和body都有Brown,所以 文档2的分数高

五、Disjunction Max Query查询

  • 上例中,title和body相互竞争,不应该将分数简单叠加,⽽是应该找到单个最佳匹配的字段的评分
  • DisjunctionMaxQuery --- 最佳字段查询
    将任何与任⼀查询匹配的⽂档作为结果返回。采⽤字段上最匹配的评分最终评分返回
POST blogs/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ]
        }
    }
}
image.png
  • 有⼀些情况下,同时匹配title和body字段的⽂档⽐只与⼀个字段匹配的⽂档的相关度更⾼
  • 但disjunctionmaxquery查询只会简单地使⽤单个最佳匹配语句的评分_score作为整体评分。怎么办?

六、最佳字段查询调优

通过TieBreaker参数调整

POST blogs/_search
{
    "query": {
        "dis_max": {
            "queries": [
                { "match": { "title": "Quick pets" }},
                { "match": { "body":  "Quick pets" }}
            ],
            "tie_breaker": 0.2
        }
    }
}
image.png
  • 获得最佳匹配语句的评分_score。
  • 将其他匹配语句的评分与tie_breaker相乘
  • 对以上评分求和并规范化

●TierBreaker是⼀个介于0-1之间的浮点数。0代表使⽤最佳匹配;1代表所有语句同等重要。

tie_breaker 参数提供了一种 dis_max 和 bool 之间的折中选择,它的评分方式如下:

  • 获得最佳匹配语句的评分 _score 。
  • 将其他匹配语句的评分结果与 tie_breaker 相乘。
  • 对以上评分求和并规范化。

tie_breaker 可以是 0 到 1 之间的浮点数,其中 0 代表使用 dis_max 最佳匹配语句的普通逻辑, 1 表示所有匹配语句同等重要。最佳的精确值需要根据数据与查询调试得出,但是合理值应该与零接近(处于 0.1 - 0.4 之间),这样就不会颠覆 dis_max 最佳匹配性质的根本。

相关文章

网友评论

      本文标题:单字符串多字段查询 Dis Max Query

      本文链接:https://www.haomeiwen.com/subject/kszmlktx.html