ES 查询 —— match 和 match_prase_小猪快点跑的博客-程序员宝宝_es match 匹配度

技术标签: ES  

目录

1、相关性评分

2、match 和 match_phrase

3、match_phrase

4、性能对比经验


1、相关性评分

ES 计算相似度的算法为 TF/IDF(检索词频率/反向文档频率)

单个次匹配

(1)字段长度准则:document 的长度越长,相关性越低。

(2)检索词频率准则:关键字在 document 中出现频率越高,相关性也越高。

多个次匹配

(1)反向 document 频率准则:对于每个检索关键字而言,在 Index 中出现的频率越高,其相对的相关性占比越低。

2、match 和 match_phrase

match 是 全文搜索,只要发现和搜索条件相关的 document,都会出现在最终的结果集中,并且 ES 会根据结果相关性评分来对结果集进行排序,结果可以是匹配部分关键字,但评分低。

match_phrase 是 邻近短语搜索,会将给定的短语当成一个完整的查询条件。当使用match_phrase进行搜索的时候,结果集都必须包含指定的查询词组。

3、match_phrase

场合:match_phrase 是短语搜索,主要用于多个词组成短语的邻近搜索,需要邻近短语的评分更高一点;

效率:match_phrase 是在搜索阶段进行的计算,会影响搜索效率,据说比 term 查询慢20倍,因此应该避免对大文本量的字段搜索,尽量进行标题,名字这种短类型的搜索才使用这个;

使用:建议使用 match_phrase 时使用标准的一个个分词,这样是方便进行邻近搜索的控制的,如果使用 ik 等分词,执行 match_phrase 时分词是不可控的,所以结果也是不可控。match 使用 ik,match_phrase 用 standard 结合一起使用也是可以的。

优化:

(1)可以通过增加词库的方式进行单纯使用 match 匹配效率是最高的,前提是你知道会搜索什么;

(2)想提高性能可以通过先使用 match 进行过滤数据,然后利用 rescore api 对已经 match 的结果进行加分,这样就减少了部分不必要的非 match 过滤;

GET test_index/_search
{
  "query": {
    "match": {
      "name":"东方宾馆"
    }
  },
 "rescore": {
        "window_size": 30, 
        "query": {         
            "rescore_query": {
                "match_phrase": {
                    "name": {
                        "query": "东方宾馆",
                        "slop":  0
                    }
                }
            }
        }
    }
}
#window_size 是每一分片进行重新评分的顶部文档数量这个只要大于你可能分页的总数*每页的数量即可(pageNumber*pageSize)实际上不需要这么多因为翻页不可能很深,这个根据业务调整即可。

4、性能对比经验

(1)match query 比 match_phrase 的性能要高 10 倍,比 proximity match(带slop的)性能要高20倍;

(2)match_phrase 据说比 term 查询慢 20 倍。

 

 

 

es 基于match_phrase/fuzzy的模糊匹配原理及使用https://www.cnblogs.com/danvid/archive/2004/01/13/10570334.html

ES查询-match VS match_phrase:https://blog.csdn.net/liuxiao723846/article/details/78365078

TF-IDF算法介绍及实现:codenong.com/25813995/

ES 搜索10 (match、match_phrase 性能优化):https://blog.csdn.net/qq_42383787/article/details/99967622

 

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_41565755/article/details/112979023

智能推荐

c++ ea 代码 生成_看EA如何生成代码框架_weixin_39916355的博客-程序员宝宝

EA的使用给我们带来了极大的方便,同时,在对EA不断的深入使用过程中,我们也一步步的对其功能有了深层次的了解,这次我学到的新功能,就是通过EA,将类图转换成代码框架,这是如何做到的呢?代码工程设置首先,代码生成是分很多种类别的,为了每次生成代码是都简单方便,我们可以先对一些常规内容进行配置。如,我想将生成的代码设置为C#版的,设置方法:选择“工具”中的“选项”,弹出窗体,继续“代码工程”,设置代码...

有没有亚马逊跨境电商适合用的浏览器排名_候鸟浏览器的博客-程序员宝宝

跨境电商用户最看重的就是浏览器的防关联效果。我以一个用户的角度,大概给大家一个相关防关联浏览器的排名。候鸟浏览器特点:安全、国内最火、亚马逊测评专用、界面简洁易上手这款候鸟浏览器是2021年最新的针对亚马逊测评开发的基于chrome内核的反指纹浏览器,经过我们测试相对起来浏览器来说防关联的安全级别更高。浏览器指纹的修改更彻底,操作起来也比较简单至于怎么使用大家可以去候鸟的官网的帮助页面看一下,个人无限版是499一个月,可以创建无限浏览器环境。可以是适配luminati、911S5等市面上常见的代理,经

Diffie-Hellman算法详细讲解 及用java实现一个基于密钥协商的socket通信_太菜了怎么办?的博客-程序员宝宝_diffiehellman算法实例

diffie-Hellman(DH)算法原理Diffie-Hellman算法是Whitefield Diffie和Martin Hellman在1976年公布的一种秘钥交换算法,它是一种建立秘钥的方法,而不是加密方法,所以秘钥必须和其他一种加密算法结合使用。这种秘钥交换技术的目的在于使两个用户安全的交换一个秘钥一遍后面的报文加密。Diffie-Hellman密钥交换算法的有效性依赖于计算离散对数的难度。模型分析1)由消息发送的一方构建密钥,这里由甲方构建密钥。2)由构建密钥的一方向对方公布其公钥

SQlite源码分析-体系结构_diaoju3333的博客-程序员宝宝

体系结构在内部,SQLite由以下几个组件组成:内核、SQL编译器、后端以及附件。SQLite通过利用虚拟机和虚拟数据库引擎(VDBE),使调试、修改和扩展SQLite的内核变得更加方便。所有SQL语句都被编译成易读的、可以在SQLite虚拟机中执行的程序集。SQLite支持大小高达2 TB的数据库,每个数据库完全存储在单个磁盘文件中。这些磁盘文件可以在不同字节顺序的计算机...

C# 获取程序当前文件夹_liehuo123的博客-程序员宝宝_c# 获取当前文件夹

Application.StartupPath     //如何获取当前进程所属程序的文件夹位置   (窗体中使用)( label16.Text=Application.StartupPath;)  Environment.SystemDirectory;         //获取系统目录      Environment.CurrentDirectory;       //获取当

sequence系列之sequence和sequencer_Iam柒年的博客-程序员宝宝_sequence和sequencer

sequence和item发送实例未封装实例如下:class bus_trans extends uvm_sequence_item; //bus item定义 rand int data; `uvm_object_utils_begin(bus_trans) `uvm_field_int(data, UVM_ALL_ON) `uvm_object_utils_end ...endclassclass child_seq extends uvm_sequence; //child_

随便推点

conda install 报错_lincong-pro的博客-程序员宝宝_conda install 报错

conda报错# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT <<<<<<<<<<<<<<<<<<<<<< Traceback (most recent call last): File "F:\

结婚的日子如此让人怀念!_hanchi8008的博客-程序员宝宝

  9月26,我结婚了。那时家长定的很急,我们很着急的忙活了一个月。一天天的临近,总感觉有干不完的事情,有什么纰漏的事没做。   等我们都回家了。要结婚了,觉得自己没有什么与众不同,那天照常很平静的过去了。那时自己好像什么都不懂,家里人告诉你需要做这个需要做那个的,说个不停。等当天时,什么都乱了。自己只是按照他们的安排去做了。一天下来,酒倒是没喝多少,可说不上来的累一直延续了一个星期。总觉得不心甘

PAT——A1085 Perfect Sequence(two pointer)_ZMST的博客-程序员宝宝

题目链接:#include<bits/stdc++.h>using namespace std;int a[100010];int main(){ int n,p; scanf("%d%d",&n,&p); for(int i=0;i<n;i++) { scanf("%d",&a[i]); ...

数据库MySQL的各种锁以及数据库索引[email protected]@的博客-程序员宝宝

以下这几个链接总结的不错,我先存着留个记录,以后有时间再总结深入理解数据库行锁与表锁细谈数据库表锁和行锁数据库索引部分,我看了看一个B站视频链接,也还没总结~B站数据库索引...

柳神跟我说话了_GuoMengKai的博客-程序员宝宝

开心啊啊啊啊啊啊啊啊啊啊。

最简单的Jsp环境配置及数据库连接调试(Jdk7+Tomcat7+Mysql5.5)_infocarrier的博客-程序员宝宝

这是我看到的最简单的Jsp环境配置,用上述软件版本,傻瓜式安装就是了,根本不用手动设置环境变量什么的。注意:利用下文中的first.jsp例子时,有两点要注意,一是把中文的双引号替换为英文的,在macromedia中很容易看出来,有很多个;二是,数据库的用户名和密码要替换为你自己的。文章出处:http://aircraftinteriorschina.com/archiver/?tid

推荐文章

热门文章

相关标签