美文网首页
dis_max和tie_break 查询字段最佳匹配

dis_max和tie_break 查询字段最佳匹配

作者: zz云飞扬 | 来源:发表于2019-12-13 17:26 被阅读0次

    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"}}

                ]

            }

        }

    }

    相关文章

      网友评论

          本文标题:dis_max和tie_break 查询字段最佳匹配

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