elasticsearch 查询(match和term)

elasticsearch 查询(match和term)

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/459646.shtml

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

相关文章

Andorid获取状态栏高度

在应用开发中,有时我们需要用代码计算布局的高度,可能需要减去状态栏(status bar)的高度。状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_heig…

linux 域名劫持,域名被劫持处理方案

首先简单说下什么是域名劫持,域名劫持就是在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则直接返回假的IP地址或者什么也不做使得请求失去响应,其效果就是对特定的网址不能访问或…

在linux下修改oracle的sys和system的密码和用户解锁

修改oracle的sys和system的密码和用户解锁 1、再linux系统上sqlplus /as sysdba进入sqlplus后就可以修改sys和system的密码了2、alter user sys identified by "密码"alter user system identified by "密码"其实就是先登录到oracle然后,在里面…

background 与backgroundcolor区别

background 可以设置 背景颜色、背景图片、定位等 background-color 只能设置 背景颜色 转载于:https://www.cnblogs.com/sun9218333949/p/4265863.html

linux 检测蓝牙 rssi,树莓派开发笔记(十一):蓝牙的使用,BlueZ协议(双树莓探测rssi并通过蓝牙互传获取的rssi信号强度)...

若该文为原创文章,转载请注明原文出处长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198808下一篇:敬请期待…接下来介绍树莓派蓝牙模块的开发,使用的协议为bluez。客户端bob,服务器al…

Android Studio项目整合PullToRefresh的问题记录

PullToRefresh下拉刷新在App中应用非常频繁,然而PullToRefresh是在ADT下开发完成的。如果要将其整合到Android Studio目录下的话颇费周折。前面的文章“Android Studio项目引入外部库注意事项(PullToRefresh)”介绍了如何将PullToRefresh的library引入到项目中。如果…

POJ 1852 Ants 分析

1、暴搜 每只蚂蚁朝向有两种&#xff0c;可以枚举n只蚂蚁的朝向&#xff0c;然后模拟蚂蚁相遇的情景&#xff0c;总共2^n中情况。 2、分析ants相碰的情况: (a->) (<-b) 变成 (<-a)(b->) 由于每只蚂蚁是相同的&#xff0c;所以等价与(<-b)(a->)&#xff0c;…

第 三 十 八 天:Linux 的 LVM 逻 辑 卷 管 理

小Q&#xff1a;书籍是全世界的营养品。生活里没有书籍&#xff0c;就好像没有阳光&#xff1b;智慧里没有书籍&#xff0c;就好像鸟儿没有翅膀。 —— 莎士比亚简介LVM&#xff1a;Logical Volume Manager&#xff08;逻辑卷管理&#xff09;&#xff…

发福利喽稀疏FFT

附介绍&#xff1a;四位来自麻省理工学院的研究人员蒂娜卡塔比&#xff08;Dina Katabi&#xff09;、海塞姆哈桑&#xff08;Haitham Hassanieh&#xff09;、比欧特因迪克&#xff08;Piotr Indyk&#xff09;和埃里克普里斯&#xff08;Eric Price&#xff09;今年1月&#…

linux 多个秘钥,linux管理多个ssh公钥密钥

很多网上免ssh密码使用git的命令都没有考虑到多个公钥密钥的情况&#xff0c;这里搜集并整理一下管理多个ssh公钥密钥的步骤。首先生成公钥和密钥&#xff0c;默认情况公钥的文件名比密钥末尾多.pubssh-keygen -t rsa -f ~/.ssh/id_rsa.work -C "Key for Work stuff"…

OpenFire源码学习之二十一:openfie对用户的优化(上)

用户类 优化用户主要是要解决用户的连接量。已经对用户的访问速度和吞吐量。 预初始化 在前面的带面中提出来了用户的预初始化。这里就不在贴出来了。下面将redis用户库连接池处理贴出来UserJedisPoolManager public class UserJedisPoolManager extends BasicModule{private s…

Camera Calibration 相机标定:原理简介(三)

3 绝对圆锥曲线 在进一步了解相机标定前&#xff0c;有必要了解绝对圆锥曲线&#xff08;Absolute Conic&#xff09;这一概念。 对于一个3D空间的点x&#xff0c;其投影空间的坐标为&#xff1a;x~[x1,x2,x3,x4]T。我们定义无穷远处的平面用符号Π∞表示&#xff0c;该平面内的…

C语言判断两字符串同构,c语言实现判断两颗树是否同构

在本题中认为如果两个树左右子树交换可以相同&#xff0c;也被认为是同构树。对应输入格式为&#xff1a;4(总结点数)A - 1B 2 3C - -D - -#include #define Tree int#define Null -1#define MAXSIZE 10struct Node{char Element;Tree Left;Tree Right;}T1[MAXSIZE], T2[MAXSIZ…

C语言常量类型及名称,菜鸟带你入门C语言|基本数据类型之常量

常量在程序中&#xff0c;有些数据是不需要改变的&#xff0c;也是不能改变的&#xff0c;因此&#xff0c;我们把这些不能改变的固定值称为常量。如下图中的“5”、“A”、“Good”&#xff0c;这些在程序执行过程中是一直保持不变的&#xff0c;他们就是常量。printf的作用是…

Android TabHost中实现标签的滚动以及一些TabHost开发的奇怪问题

最近在使用TabHost的时候遇到了一些奇怪的问题&#xff0c;在这里总结分享备忘一下。 首先说一点TabActivity将会被FragmentActivity所替代&#xff0c;但是本文中却是使用的TabActivity。 下面说说本程序能够实现的功能&#xff1a; 实现TabHost中的标题栏能够横向滚动&#x…

tl wn322g linux驱动下载,怎样才能装好tl_wn322G+V2.0版USB无线网卡的Linux驱动

怎样才能装好tl_wn322GV2.0版USB无线网卡的Linux驱动tl_wn322G 2.0版无线网卡采用的是Atheros 的AR9271方案&#xff0c;我尝试了用ndiswrapper-1.55在linux下安装该无线网卡的Windows驱动&#xff0c;安装windows版的驱动时&#xff0c;用ndiswrapper -l &#xff0c;显示为错…

20151022作业

中级学员&#xff1a;2015年10月22日作业一、采购管理1、采购管理的主要过程&#xff1b;答&#xff1a;采购管理包括如下几个过程。(1)编制采购计划。决定采购什么&#xff0c;何时采购&#xff0c;如何采购。(2)编制询价计划。记录项目对于产品、服务或成果的需求&#xff0c…

editplus 快捷键

shift i 减少缩进 tab 增加缩进 ctrl shift f 使用代码折叠功能转载于:https://www.cnblogs.com/zztinglan/p/4277616.html

Spring + Dubbo + zookeeper (linux) 框架搭建

2019独角兽企业重金招聘Python工程师标准>>> dubbo简介 节点角色说明&#xff1a; Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。 Monitor: 统计服务的调用次调和调用时间的监控中心。 Container: …

c语言 函数编程四个数相加,C语言第四章课后编程题

1.编写程序&#xff0c;从键盘上输入4个整数&#xff0c;输出最小值。此题较为简单&#xff0c;只需定义一个桥梁最小值min就可以来着次比较他们的大小。2.编写一个程序&#xff0c;从键盘输入一个四位整数n&#xff0c;输出它的各位数字之和。例如n1308&#xff0c;则输出12&a…