term和match查询总结(中文检索)

es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL)。
由于DSL查询更为直观也更为简易,所以大都使用这种方式。
DSL查询是POST过去一个json,由于post的请求是json格式的,所以存在很多灵活性,也有很多形式。
这里有一个地方注意的是官方文档里面给的例子的json结构只是一部分,并不是可以直接黏贴复制进去使用的。一般要在外面加个query为key的机构。

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),默认的字符串是被分析的。

拿官网上的例子举例:

mapping是这样的:

PUT my_index
{"mappings": {"my_type": {"properties": {"full_text": {"type":  "string"},"exact_value": {"type":  "string","index": "not_analyzed"}}}}
}PUT my_index/my_type/1
{"full_text":   "Quick Foxes!","exact_value": "Quick Foxes!"  
}

其中的full_text是被分析过的,所以full_text的索引中存的就是[quick, foxes],而extra_value中存的是[Quick Foxes!]。

那下面的几个请求:

GET my_index/my_type/_search
{"query": {"term": {"exact_value": "Quick Foxes!"}}
}

请求的出数据,因为完全匹配

GET my_index/my_type/_search
{"query": {"term": {"full_text": "Quick Foxes!"}}
}

请求不出数据的,因为full_text分词后的结果中没有[Quick Foxes!]这个分词。

bool联合查询: must,should,must_not

如果我们想要请求"content中带宝马,但是tag中不带宝马"这样类似的需求,就需要用到bool联合查询。
联合查询就会使用到must,should,must_not三种关键词。

这三个可以这么理解

  • must: 文档必须完全匹配条件
  • should: should下面会带一个以上的条件,至少满足一个条件,这个文档就符合should
  • must_not: 文档必须不匹配条件

比如上面那个需求:

{"query": {"bool": {"must": {"term": {"content": "宝马"}},"must_not": {"term": {"tags": "宝马"}}}}
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/576557.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习笔记(十九)——最大熵原理和模型定义

一、最大熵原理 最大熵原理是概率模型学习的一个准则。最大熵原理认为,在学习概率模型时,在所有可能的概率分布中,熵最大的模型是最好的模型。通常用约束条件来确定概率模型的集合,所以,最大熵模型也可以表述为在满足约…

EasyCode.Net代码生成器使用心得

前段时间购买了一个EasyCode的正式使用许可 看他的界面设计的不错 就用他生成了一个项目(目地是想把以前我自己的一个程序的界面给更换下 人家有专业的UI设计我自己设计出来的肯定没有人家专业UI设计师弄出来的好看) ,项目生成完了 发现还不能直接更换界面他的是sq…

ElasticSearch(中文检索)source总结

包含不包含这里不多讲了。 GET /lib4/user/_search {"query": {"match_all": {}},"_source": {"includes": ["name" ,"address"],"excludes": ["age" , "birthday" ]} }直接看看…

2012 依赖注入框架

以下内容来自维基百科的控制反转词条 控制反转(英语:Inversion of control,缩写为IoC),也叫做依赖注入(Dependency Injection,简称DI),是面向对象编程中的一种设计原则&a…

机器学习笔记(二十)——求解最大熵模型

一、问题的引出 最大熵模型的学习过程就是求解最大熵模型的过程。最大熵模型的学习可以形式化为约束最优化问题。 对于给定的训练数据集T{(x1,y1),(x2,y2),…,(xn,yn)}及特征函数fi(x,y),i1,2,…,n,最大熵模型的学习等价于约束最优化问题: maxP∈C…

ElasticSearch前缀匹配查询和范围查询(中文检索)

GET /lib4/user/_search {"query": {"match_phrase_prefix": {"name": {"query": "赵"}}} } GET /lib4/user/_search {"query": {"prefix": {"name": "赵"}} }范围查询 GET /lib4…

系统管理员必须知道的PHP安全实践

系统管理员必须知道的PHP安全实践 PHP是一种开源服务器端脚本语言,应用很广泛。Apache web服务器提供了这种便利:通过HTTP或HTTPS协议, 访问文件和内容。配置不当的服务器端脚本语言会带来各种各样的问题。所以,使用PHP时要小心。…

ElasticSearch模糊查询(中文检索)

# "*" 表示匹配任意字符 GET /lib4/user/_search {"query": {"wildcard": {"name": "赵*"}} }# "?" 表示匹配任意一个字符 GET /lib4/user/_search {"query": {"wildcard": {"name&quo…

最优化学习笔记(十四)——共轭梯度法

共轭梯度法不需要预先给定Q共轭方向,而是随着迭代的进行不断产生Q共轭方向。在每次的迭代中,利用上一个搜索方向和目标函数在当前迭代点的梯度向量 之间的线性组合构造一个新的方向,使其与前边已经产生的搜索方向组成Q共轭方向。对于一个n维二…

ElasticSearch filter查询

学习查询之前,我还是老规矩,先准备数据 #Filter查询 #filter是不计算相关性的,同时可以cache.因此,filter速度要快于query. POST /lib5/items/_bulk {"index":{"_id": 1}} {"price": 40,"ite…

SQL Server 2005中的分区表(四):删除(合并)一个分区

在前面我们介绍过如何创建和使用一个分区表,并举了一个例子,将不 同年份的数据放在不同的物理分区表里。具体的分区方式为: 第1个小表:2010-1-1以前的数据(不包含2010-1-1)。 第2个小表:2010-1-…

最优化学习笔记(十五)——拟牛顿法(1)

拟牛顿法分为五部分来讲,本文这部分作为引言,第二部分讲Hessian矩阵逆矩阵的近似,第三部分秩1修正公式,第四部分为DFP算法,最后BFGS算法。 牛顿法是一种具有较高实用性的优化问题的求解方法。牛顿法如果收敛&…

深入理解java虚拟机 (一) 第二版

前言: Java是目前用户最多、使用范围最广的软件开发技术之一。Java 的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、 Java编程语言及许多第三方Java框架(如Spring、Struts 等)构成。在国内,有关Java API Java语言语法及…

畅通您的iOS开发之路

随着大家对苹果产品的趋之若鹜,iphone与ipad软件开发的前景也相当广阔。然而,目前精通iOS开发的专业人才却是凤毛麟角。因此,安博中 程在2012年推出重磅课程——“iPhone与iPad开发实战之路——精通iOS开发”高级培训班,为想从事i…

深入理解java虚拟机 (二) 第二版

如何阅读本书 本书-共分为五个部分:走近Java、自动内存管理机制、虛拟机执行子系统、程序编译与代码优化、高效并发。各部分基本上是互相独立的,没有必然的前后依赖关系,读者可以从任何- -个感兴趣的专题开始阅读,但是每个部分中的各个章节间…

最优化学习笔记(十六)——拟牛顿法(2)

Hessian矩阵逆矩阵的近似 一、拟牛顿法的基本思路 令H0,H1,H2,…表示Hessian矩阵逆矩阵F(x(k))−1的一系列近似矩阵。我们要讨论的是这些近似矩阵应该满足的条件,这是拟牛顿法的基础。首先,假定目标函数f的Hessian矩阵F(x)是常数矩阵,与x无关…

tool vmmap 配置符号文件 symbolic file

转载于:https://www.cnblogs.com/titer1/archive/2012/03/21/2410316.html

最优化学习笔记(十七)——拟牛顿法(3)

秩1修正公式 在秩1修正公式中,修正项为αkz(k)z(k)T,αk∈R,z(k)∈Rn,是一个对称矩阵,近似矩阵的更新方程为: Hk1Hkαkz(k)z(k)T\boldsymbol{H}_{k+1} = \boldsymbol{H}_{k} + \alpha_k\boldsymbol{z}^{(k)}\boldsymbol{z}^{(k)T}注意&#…

深入理解java虚拟机 (三) 第二版

参考资料 本书名为“深人理解Java虚拟机”,但要想深人理解虚拟机,仅凭- -本书肯定是远远不够的,读者可以通过以下信息找到更多关于Java虚拟机方面的资料。我在写作此书的时候,也从下面这些参考资料中获得了很大的帮助。. (1)书籍…

memcached 如果进程占用cpu很高

memcached 如果进程占用cpu很高一客户占用到了 25% 把mencache内存大小从32m 改成256m 后 memcached 基本占用cpu 是0可能分配的内存不够用了 大量的新缓存需要进入 同时大量的旧缓存又需要被淘汰出来 导致 一进一出非常频繁 从而导致服务性能下降加大内存吧操作如下&#xff…