dis_max和tie_break 查询字段最佳匹配

2019-12-13  本文已影响0人  zz云飞扬

best fields策略,dis_max

best fields策略,就是说,搜索到的结果,应该是某一个field中匹配到了尽可能多的关键词,被排在前面;而不是尽可能多的field匹配到了少数的关键词,排在了前面,dis_max就是best fields 策略

1、dis_max查询只是简单的使用最佳匹配查询子句得到的_score. 将其它匹配的查询子句考虑进来也是可能的。通过指定tie_breaker参数.

dis_max 是同一字段出现所有查询关键字时得分会最高。 而指定tie_breaker 系数指定同一份id下跨字段匹配也考虑进来。
{

    "query": {

        "dis_max": {

            "queries": [

                { "match": { "title": "Quick pets" }},

                { "match": { "body":  "Quick pets" }}

            ],

            "tie_breaker": 0.3

        }

    }

}

原文链接:https://blog.csdn.net/m0_37139189/article/details/83339833

2、dis_max只取某一个query最大的分数,完全不考虑其他query的分数

3、使用tie_breaker将其他query的分数也考虑进去

tie_breaker参数的意义,在于说,将其他query的分数,乘以tie_breaker,然后综合与最高分数的那个query的分数,综合在一起进行计算

除了取最高分以外,还会考虑其他的query的分数

tie_breaker的值,在0~1之间,是个小数,就ok

GET  /_search

{

"query": {

"dis_max": {

"queries": [

{"match": {"title":"人马"}},

{"match": {"body":"改革春风"}}

            ],

"tie_breaker":0.3

        }

    }

参考https://blog.csdn.net/gwd1154978352/article/details/83856927

4、基于multi_match语法实现dis_max和tie_breaker

这边的title^2表示把title这个字段设置boost为2(权重默认是1)

minimum_should_match在之前的ElasticSearch教程——精准全文检索一文中已经说过,是用来控制搜索结果的精准度,只有匹配一定数量的关键词的数据,才能返回

GET/forum/article/_search

{

"query": {

"multi_match": {

"query":"java solution",

"type":"best_fields",

"fields":              ["title^2","content"],

"tie_breaker":0.3,

"minimum_should_match":"50%"

    }

  }

上面的举例和下面的这个结果是一样的?

GET

/forum/article/_search

{

"query": {

"dis_max": {

"queries":  [

        {

"match": {

"title": {

"query":"java beginner",

"minimum_should_match":"50%",

"boost":2

            }

          }

        },

        {

"match": {

"body": {

"query":"java beginner",

"minimum_should_match":"30%"

            }

          }

        }

      ],

"tie_breaker":0.3

    }

  }

}

5、搜索title或content中包含java或solution的帖子

下面这个就是multi-field搜索,多字段搜索, bool查询时多字段搜索,不是best_fields 搜索

GET/forum/article/_search

{

"query": {

"bool": {

"should": [

{"match": {"title":"java solution"}},

{"match": {"content":"java solution"}}

            ]

        }

    }

}

上一篇下一篇

猜你喜欢

热点阅读