elasticsearch term match multi_match区别
转自: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区别相关推荐
- ES中term、terms、match的区别
ES中term.terms.match的区别 term query会去倒排索引中寻找确切的term,它并不知道分词器的存在,这种查询适合keyword.numeric.date等明确值的 term:查 ...
- Elasticsearch:Multi-match (multi_match) 及 Disjunction max 查询
多重匹配(multi_match)查询,顾名思义就是跨多个字段搜索查询. 例如,如果我们想在 title.synopsis 和 tags 三个字段中搜索 Java 一词,那么 multi_match ...
- Elasticsearch term vector
Elasticsearch term vector 一. 概念 二. term vector数据的出现时机 三. 数据探查 3.1 最基本的数据探查 3.2 探查指定term的term vector ...
- Elasticsearch和solr的区别
Elasticsearch 和 solr 的区别 Elasticsearch 简介 Elasticsearch是一个开源(Apache 2许可证),是一个基于Apache Lucene库构建的REST ...
- js正则表达exec和match的区别(转)
转自:http://blog.csdn.net/fushou/article/details/6934608 以前用js很少用到js的正则表达式,即使用到了,也是诸如邮件名称之类的判断,网上代码很多, ...
- python re search match_简诉Python Re模块中re.search和re.match的区别
先前的两篇文章<python re.match函数是什么,了解python match函数的使用>,<Python中的python re.search方法详解>,我们介绍了Py ...
- Elasticsearch match和term查询的区别
区别 match 全文搜索, 通常用于对text类型字段的查询,会对进行查询的文本先进行分词操作,如下图 term 精确查询,通常用于对keyword和有精确值的字段进行查询,不会对进行查询的文本进行 ...
- Elasticsearch中 match、match_phrase、query_string和term的区别
(一)text字段和keyword字段的区别 以下给出一个例子: 首先建立一个索引和类型,引入一个keywork的字段: PUT my_index {"mappings": {&q ...
- Elasticsearch查询之term/match解析
2019独角兽企业重金招聘Python工程师标准>>> es种有两种查询模式,一种是像传递URL参数一样去传递查询语句,被称为简单搜索或查询字符串(query string)搜索,比 ...
最新文章
- php smarty框架案例,php封装的smarty类案例
- c语言告白,C语言告白代码,一闪一闪亮晶晶~
- SIP(Session Initiation Protocol,会话初始协议)
- 程序员面试金典——17.12整数对查找
- python time sleep 阻塞 异步_Python Tornado异步请求被阻塞
- Docker error : no space left on device docker 空间不足
- 解决libxml2不支持中文的问题
- java连接mysql数据库的详细步骤
- Python中文文本分句 sentence tokenize
- Android 简单直接--无需jar包zing实现生成、扫描二维码
- cmake + googletest 之一 入门
- 数据库设计-多级栏目(标题)分类设计
- 微信小程序:简单舒服新UI装逼制作神器
- android 定时删除文件,使用安卓手机,记得定期清理这4个文件夹,可轻松释放大量空间...
- chrome浏览器使用js导出Excel出现网络错误
- Vue 组件封装之 Questionnaire 问卷调查
- 搜索引擎的小技巧【可以组合起来使用】:
- 关于Monkey稳定性测试,这是我看到最详细的文章
- rk3288_5.1_BOX 调整HDMI屏幕满屏
- Android安卓麻将识别源码Demo( 三)
热门文章
- matlab绘制bland-altman,制作Bland-Altman图的步骤和程序(以SPSS作图为例讲解)
- 中山大学新华学院c语言试题,中山大学新华学院国际学院2019级学生入学测试
- arduino出现java错误_arduino在上传的时候出现这样的错误,在线求助大神!!!
- linux 编译mysql_linux下编译MYSQL
- windows下python使用fllow扩展持续读取文件的bug
- Java开发面试问题,Jsoup解析html
- 【金三银四】java是世界上最好的语言
- 【迁移学习(Transfer L)全面指南】Pytorch处理体积数据
- python【数据结构与算法】贝祖定理简单讲解
- 【django轻量级框架】云端系统之Django框架