• 21.使用rescoring机制优化近似匹配搜索性能


       

    一、matchphrase match(proximity match)区别

     

    1match:只要简单的匹配到了一个term,就会将term对应的doc作为 结果返回。

    2phrase match 首先扫描到所有termdoc list; 找到包含所有termdoc list; 然后对每个doc都计算每个termposition,然后进行复杂的计算,看这些position是否符合查询指定的slop范围。如果都符合,才作为结果返回。

    3match query的性能比phrase matchproximity match(有slop)要高很多。因为后两者都要计算position的距离。官方称:match queryphrase match的性能要高10倍,比proximity match的性能要高20倍。但是我们也别太担心,因为es的性能一般都在毫秒级别,match query一般就在几毫秒,或者几十毫秒,而phrase matchproximity match的性能在几十毫秒到几百毫秒之间,所以也是可以接受的。

       

    二、match + proximity match使用时性能优化

       

    1、思路和基本做法

    优化proximity match的性能,主要思路是减少要进行proximity match搜索的document数量,这也符合用户使用行为,一般用户会分页查询,只会看到前几页的数据,所以不需要对所有结果进行proximity match操作。比如:match查询出来也许1000doc,其实用户大部分情况下是分页查询的,所以可能最多只会看前几页,比如一页是10条,最多也许就看5页,就是50

    proximity match只要对前50doc进行slop移动去匹配然后贡献分数即可,不需要对全部1000doc都去进行计算和贡献分数。

    主要做法是:用match query先过滤出需要的数据,然后再用proximity match来根据term距离提高doc的分数,同时proximity match只针对每个shard的分数排名前ndoc起作用,来重新调整它们的分数,这个过程称之为rescoring(重计分)。而不需要对marth查询出来的全部doc进行移动打分,从而提高性能

       

    2、语法

       

       

    GET /forum/article/_search

    {

    "query": {

    "match": {

    "content": "java spark"

    }

    },

    "rescore": {

    "window_size": 50,

    "query": {

    "rescore_query": {

    "match_phrase": {

    "content": {

    "query": "java spark",

    "slop": 50

    }

    }

    }

    }

    }

    }

       

    "window_size": 50, 表示告知es用户只需要前50个数据。

  • 相关阅读:
    ASP.NET MVC CheckBoxFor的int to bool
    ASP.NET MVC jQuery 树插件在项目中使用方法(一)
    ASP.NET MVC Select无限级分类选择下拉框
    ASP.NET MVC 处理404与500错误页面的方法
    使用Angularjs开发Web App 视频课程 --麦子学院课程
    NEVER QUIT. NEVER SAY NEVER.
    夏天那么短,思念却很长
    不要瞧不起别人的生活,他人也在用你看不见的方式努力
    Windows 10 安装 到SSD硬盘
    12.23daily_scrum
  • 原文地址:https://www.cnblogs.com/liuqianli/p/8526469.html
Copyright © 2020-2023  润新知