目录

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

ES 查询 —— match 和 match_prase相关推荐

  1. Es 模糊查询 match,wildcard

    Es 模糊查询的方式 要求: Es查询: 查询工单信息, 输入 "测试",查出 form_name 为字段中有查询出含有符合内容的数据 match:分词模糊查询: 比如" ...

  2. ES 查询关键字(match, term, range,terms)、组合多查询(must, should, must_not,filter)、分页、排序sort、高亮highlight

    一.常用查询关键字 1. match 查询 match查询会将搜索词分词,再与目标查询字段进行匹配,若分词中的任意一个词与目标字段匹配上,则可查询到. { "match": { & ...

  3. Elasticsearch在docker下安装运行,ES查询、分词器

    目录 Elasticsearch的一点背景 数据输入 数据输出 集群 集群灾备 集群管理 Docker容器中运行ElasticSearch.Kibana.cerebro ElasticSearch K ...

  4. ES(三)es查询语法

    一.介绍:语法GET /索引/类型/_search         查询条件,这个查询条件有两种写法, 一种是在GET的url中指定参数:这种方法比较简单,如查询所有 GET /wtyy-test/u ...

  5. docker安装es+mac安装Kibana工具+es查询语法笔记

    一.docker安装es 1.下载镜像 docker pull elasticsearch:7.9.0 下载完后,查看镜像 docker images ​​ 2.启动镜像 docker network ...

  6. ElasticSearch 6.3版本(ES)查询人名关键字不拆词查询

    ElasticSearch 6.3版本(ES)查询关键字不拆词查询:类似mysql 的 like 语句. mysql的sql语法类似如下,采用大量like和locate语法,进行模糊查询,导致查询一个 ...

  7. php拉查询封装,对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询...

    elasticsearch-build-query 对Elasticsearch-PHP进行查询语句封装 可实现链式调用 方便 es查询 Installation via Composer The r ...

  8. ES查询term的用法

    1.term 的用法 term检索,如果content分词后含有中国这个token,就会检索到 curl -XPOST http://192.168.1.101:9200/index/fulltext ...

  9. 关于ES查询文档标记来源问题

    关于ES查询文档标记来源问题 1.目前知了使用的方案 知了目前使用的是ES为Java提供一个查询接口,叫做QueryBuilder 当用户传入查询后,现在我们做了一个这个事情--多字段匹配查询 reB ...

  10. ES 查询数据的工作原理是什么?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | http://8rr.co/GsAa 面试题 ...

最新文章

  1. 也许这样理解JavaScript连续赋值更加简单明了一些
  2. JAVA二分查找-探讨思维与代码的一致性
  3. UVA 2474 - Balloons in a Box 爆搜
  4. DevOps(过程、方法与系统的统称)是什么
  5. pytesseract
  6. CentOS 7.x防火墙问题
  7. Form各键盘触发子所对应的“按键”
  8. Tinker源码解析
  9. 使用grep进行负匹配(匹配不包含foo的行)
  10. 河北省计算机考试报名的照片要求,「河北省考」河北公务员考试报名照片制作在线处理照片教程...
  11. java notifier_Java Notifier類代碼示例
  12. 前端框架介绍篇(小白专属)
  13. Android脑图--Android动画
  14. wincc服务器不可用项目打不开,wincc客户端与服务器同步
  15. BMI值(Body Mass Index,简称BMI),是指身高体重指数,是国际上常用的衡量人体肥胖程度和是否健康的重要标准,BMI的计算公式是:体重指数(BMI)=体重(kg)÷身高2(m)。
  16. 关于文件读写缓存的问题(flush的使用场景)
  17. 教您更改data目录名称-将DedeCMS根目录下的data目录迁移到其他目录的方法
  18. 计算机学院军训特色标语,各具学院特色的军训口号
  19. 试给每个局域网分配一个合适的网络前缀
  20. 绝对好使的二十条电脑超级技巧

热门文章

  1. 行业洞察系列之《事件管理的 5 个阶段及其改进建议》
  2. 大数据有哪些基本特征,有什么作用和用途?
  3. ubuntu自带Firefox安装flash插件
  4. matlab确定分段函数的间断点,分段函数必有间断点( )
  5. 50行的python游戏代码_教你使用50行Python代码刷王者荣耀金币
  6. The Innovation | 用系统生物学的观点鸟瞰肿瘤易感基因
  7. linux strace php,在Linux下使用strace窥视Oracle LGWR进程
  8. 【基础数学】单射、满射和双射的定义、区别
  9. Android Room 数据库使用记录
  10. Lambda表达式的省略