转自:http://www.cnblogs.com/yjf512/p/4897294.html

match

最简单的一个match例子:

查询和"我的宝马多少马力"这个查询语句匹配的文档。

{"query": {"match": {"content" : {"query" : "我的宝马多少马力" } } } }

上面的查询匹配就会进行分词,比如"宝马多少马力"会被分词为"宝马 多少 马力", 所有有关"宝马 多少 马力", 那么所有包含这三个词中的一个或多个的文档就会被搜索出来。
并且根据lucene的评分机制(TF/IDF)来进行评分。

match_phrase

比如上面一个例子,一个文档"我的保时捷马力不错"也会被搜索出来,那么想要精确匹配所有同时包含"宝马 多少 马力"的文档怎么做?就要使用 match_phrase 了

{"query": {"match_phrase": {"content" : {"query" : "我的宝马多少马力" } } } }

完全匹配可能比较严,我们会希望有个可调节因子,少匹配一个也满足,那就需要使用到slop。

{"query": {"match_phrase": {"content" : {"query" : "我的宝马多少马力", "slop" : 1 } } } }

multi_match

如果我们希望两个字段进行匹配,其中一个字段有这个文档就满足的话,使用multi_match

{"query": {"multi_match": {"query" : "我的宝马多少马力","fields" : ["title", "content"] } } }

但是multi_match就涉及到匹配评分的问题了。

我们希望完全匹配的文档占的评分比较高,则需要使用best_fields

{"query": {"multi_match": {"query": "我的宝马发动机多少","type": "best_fields", "fields": [ "tag", "content" ], "tie_breaker": 0.3 } } }

意思就是完全匹配"宝马 发动机"的文档评分会比较靠前,如果只匹配宝马的文档评分乘以0.3的系数

我们希望越多字段匹配的文档评分越高,就要使用most_fields

{"query": {"multi_match": {"query": "我的宝马发动机多少","type": "most_fields", "fields": [ "tag", "content" ] } } }

我们会希望这个词条的分词词汇是分配到不同字段中的,那么就使用cross_fields

{"query": {"multi_match": {"query": "我的宝马发动机多少","type": "cross_fields", "fields": [ "tag", "content" ] } } }

term

term是代表完全匹配,即不进行分词器分析,文档中必须包含整个搜索的词汇

{"query": {"term": {"content": "汽车保养"}}
}

查出的所有文档都包含"汽车保养"这个词组的词汇。

使用term要确定的是这个字段是否“被分析”(analyzed),默认的字符串是被分析的。

转载于:https://www.cnblogs.com/bonelee/p/6105394.html

elasticsearch term match multi_match区别相关推荐

  1. ES中term、terms、match的区别

    ES中term.terms.match的区别 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查 ...

  2. Elasticsearch:Multi-match (multi_match) 及 Disjunction max 查询

    多重匹配(multi_match)查询,顾名思义就是跨多个字段搜索查询. 例如,如果我们想在 title.synopsis 和 tags 三个字段中搜索 Java 一词,那么 multi_match ...

  3. Elasticsearch term vector

    Elasticsearch term vector 一. 概念 二. term vector数据的出现时机 三. 数据探查 3.1 最基本的数据探查 3.2 探查指定term的term vector ...

  4. Elasticsearch和solr的区别

    Elasticsearch 和 solr 的区别 Elasticsearch 简介 Elasticsearch是一个开源(Apache 2许可证),是一个基于Apache Lucene库构建的REST ...

  5. js正则表达exec和match的区别(转)

    转自:http://blog.csdn.net/fushou/article/details/6934608 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多, ...

  6. python re search match_简诉Python Re模块中re.search和re.match的区别

    先前的两篇文章<python re.match函数是什么,了解python match函数的使用>,<Python中的python re.search方法详解>,我们介绍了Py ...

  7. Elasticsearch match和term查询的区别

    区别 match 全文搜索, 通常用于对text类型字段的查询,会对进行查询的文本先进行分词操作,如下图 term 精确查询,通常用于对keyword和有精确值的字段进行查询,不会对进行查询的文本进行 ...

  8. Elasticsearch中 match、match_phrase、query_string和term的区别

    (一)text字段和keyword字段的区别 以下给出一个例子: 首先建立一个索引和类型,引入一个keywork的字段: PUT my_index {"mappings": {&q ...

  9. Elasticsearch查询之term/match解析

    2019独角兽企业重金招聘Python工程师标准>>> es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比 ...

最新文章

  1. php smarty框架案例,php封装的smarty类案例
  2. c语言告白,C语言告白代码,一闪一闪亮晶晶~
  3. SIP(Session Initiation Protocol,会话初始协议)
  4. 程序员面试金典——17.12整数对查找
  5. python time sleep 阻塞 异步_Python Tornado异步请求被阻塞
  6. Docker error : no space left on device docker 空间不足
  7. 解决libxml2不支持中文的问题
  8. java连接mysql数据库的详细步骤
  9. Python中文文本分句 sentence tokenize
  10. Android 简单直接--无需jar包zing实现生成、扫描二维码
  11. cmake + googletest 之一 入门
  12. 数据库设计-多级栏目(标题)分类设计
  13. 微信小程序:简单舒服新UI装逼制作神器
  14. android 定时删除文件,使用安卓手机,记得定期清理这4个文件夹,可轻松释放大量空间...
  15. chrome浏览器使用js导出Excel出现网络错误
  16. Vue 组件封装之 Questionnaire 问卷调查
  17. 搜索引擎的小技巧【可以组合起来使用】:
  18. 关于Monkey稳定性测试,这是我看到最详细的文章
  19. rk3288_5.1_BOX 调整HDMI屏幕满屏
  20. Android安卓麻将识别源码Demo( 三)

热门文章

  1. matlab绘制bland-altman,制作Bland-Altman图的步骤和程序(以SPSS作图为例讲解)
  2. 中山大学新华学院c语言试题,中山大学新华学院国际学院2019级学生入学测试
  3. arduino出现java错误_arduino在上传的时候出现这样的错误,在线求助大神!!!
  4. linux 编译mysql_linux下编译MYSQL
  5. windows下python使用fllow扩展持续读取文件的bug
  6. Java开发面试问题,Jsoup解析html
  7. 【金三银四】java是世界上最好的语言
  8. 【迁移学习(Transfer L)全面指南】Pytorch处理体积数据
  9. python【数据结构与算法】贝祖定理简单讲解
  10. 【django轻量级框架】云端系统之Django框架