Elasticsearch学习笔记(二)Search API 与 Query DSL
一、 Search API
eg: GET /mall/product/_search?q=name:productName&sort=price desc
特点:search的请求参数都是以HTTP请求的的query stirng 附带的
适用范围:适用于临时的在命令行使用一些工具,比如curl,快速的发出请求,来检索想要的信息;
适用于简单的查询条件
二、Query DSL
将Query DSL视为ASL查询则有两种类型的查询语句:
叶子查询语句(Leaf Query clause) :
叶子查询语句根据指定的字段查询指定的值,比如match,term,rang查询(他们也可以自己嵌套自己查询)
复合查询语句(compound query clause):
复合查询语句包装了其他叶子查询语句或者复合查询语句,并被用于以逻辑方式组合多个查询(比如:bool和dis_max查询)或者改变他们的行为(比如constant_score查询)
查询语句的不同行为取决于查询语句是在query上下文还是在filter上下文内。
1、Query and filter Context
(1)Query Context
在Query Context中,一个查询语句用以回答“document与 查询语句 是有多么匹配”,除了决定document是否匹配,查询语句还计算一个表示document 匹配度的分值_score,相对于其他document。
无论何时一个查询语句被传递给query参数 query context都生效,就像search api里面的query参数
注意:query参数是指 json body里面 query:{这里面的请求参数}
(2)Filter Context
在Filter Context中,一个查询语句用以回答“这个document是否匹配于查询语句”并不进行分值的计算。Filter Context通常被用于过滤结构化数据。
经常被使用的Filter,Elasticsearch将自动进行缓存,以提升性能。
无论何时一个查询语句传递给filter 参数,Filter Context都将生效,就像bool查询中的must_not参数和filter参数。而filter参数在constant_score查询或者filter聚合中。
2、Match All Query
//匹配所有document,默认_score分值为1
GET /_search
{
"query":{
"match_all":{}
}
}
可以通过boost修改分值
GET /_search
{
"query": {
"match_all": { "boost" : 1.2 }
}
}
match_none 与match_all相反,没有document与之匹配
GET /_search
{
"query":{
"match_none":{}
}
}
3、Full text querise
高水平的全文查询 通常用于在全文字段上进行全文查询,像在body和email上。他们清楚字段是如何被查询的并且在执行之前将每个字段的analyzer(或者analyzer_search)应用在字符串查询中。
(1) Match query
标准的全文查询,包括模糊匹配,短语和近义词查询
match查询接受text 文本,数字numeric,日期dates进行查询
GET /_search
{
"query":{
"match":{
"message":"query text"
}
}
}
其中,message字段会先被拆解,建立倒排索引
1)match
match查询是一个boolean类型。它意味着他不仅将分析所提供的文本而且在分析处理过程中还从提供的文本中钩子一个boolean类型的查询。 operate标记可以设置成or或者and 以控制boolean语句(默认为or),可以使用minimum_should_match参数设置匹配的最小数的可选的should语句
analyzer可以用于控制哪个分析器analyzer将执行文本的分析处理过程,字段默认精确匹配于定义信息或者默认搜索分析器。
lenient参数设置为true时将忽视由数据类型不匹配导致的异常信息,就像尝试用一个文本text查询字符串的方式查询一个数字字段。lenient参数默认情况下为false
2)Fuzziness 模糊匹配
fuzziness允许基于查询的字段类型进行模糊匹配。
prefix_length和max_expansions可以用于控制模糊处理过程,在这种情况下。如果模糊选项设置成这样的查询将使用top_terms_blended_freqs_${max_expansions}作为他的重写方法,fuzzy_rewrite参数允许控制查询如何进行重写。
fuzzy transpostions 模糊移项(ab->ba)默认情况下是允许的,但是也可以通过设置fuzzy_transpositions设置成false来禁用掉。
GET /_search
{
"query":{
"match":{
"message":{
"query":"this is a test",
"operator":"and"
}
}
}
}
3)Zero terms query(zero_terms_query)
如果分析器移除查询里面的所有token就像stop过滤器所做的那样,那么默认的行为是将不匹配任何document。为了改变这些,可以使用zero_terms_query 选项,它接收默认值none和与match_all查询一致的all值
GET /_search
{
"query":{
"match":{
"message":{
"query":"to be or not to be",
"operator":"and",
"zero_terms_query":"all"
}
}
}
}
4)Cutoff frequency(cutoff_frequency )
match查询支持cutoff_frequency,即允许指定一个绝对的或者相对的文档频率。高频率的词组被移动至一个任意的子查询内。如果子查询存在一个低频词组 在or操作的情况下 和所有的低频词组 都在and操作匹配的情况下这些仅仅被存储起来。
这些查询允许运行时动态处理stopwords的动作是领域独立的并且不需要一个分词stopwords文件。它阻止得分/迭代高频词组 并且只有更加有意义的或者低频的词组匹配一个文档时才考虑这些词组。但是,如果所有的查询词组
都在所给定的cutoff_frequency值之上,则将自动被传递给一个纯粹的连接词(and)查询以保证快速执行。
cutoff_frequency要么与文档的总数相关如果在0到1范围内,要么绝对大于或者等于1.0
以下这个例子展示了由专门分词组成的一个查询:
GET /_search
{
"query":{
"match":{
"message":{
"query":" to be or not to be",
"cutoff_frequency":0.001
}
}
}
}
(2)Match Phrase Query(match_phrase)
像match查询,但是被用于精确匹配短语或者近义词匹配
match_phrase查询分析指定的文本并从该分析文本中创建一个短语查询,如下:
GET /_search
{
"query":{
"match_phrase":{
"message":"this is test"
}
}
}
在任何顺序中,短语查询匹配于一个可配置的slop(默认值为0)。转置的项有一个值为2的slop
analyzer可以用于控制分析器将要执行的文本的分析过程。它默认为字段显示映射于定义或者默认的搜索分析器
GET /_search
{
"query":{
"match_phrase":{
"message":{
"query":"this is a text",
"analyzer":"my_analyzer"
}
}
}
}
(3)Match Phrase Prefix Query(match_phrase_prefix)
官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl.html
Elasticsearch学习笔记(二)Search API 与 Query DSL的更多相关文章
- ZooKeeper学习笔记二:API基本使用
Grey ZooKeeper学习笔记二:API基本使用 准备工作 搭建一个zk集群,参考ZooKeeper学习笔记一:集群搭建. 确保项目可以访问集群的每个节点 新建一个基于jdk1.8的maven项 ...
- 2018/2/11 ELK技术栈之ElasticSearch学习笔记二
终于有时间记录一下最近学习的知识了,其实除了写下的这些还有很多很多,但懒得一一写下了: ElasticSearch添加修改删除原理:ElasticSearch的倒排索引和文档一旦生成就不允许修改(其实 ...
- Elasticsearch学习笔记二
PS:上一篇已经介绍了ES的一些基础概念以及单机版ES的安装,配置,本文主要介绍ES的集群管理,CRUD以及简单聚合查询. 集群管理 ES的集群部署起来也很方便,将单机版SCP复制几分,修改elast ...
- ElasticSearch学习笔记(超详细)
文章目录 初识ElasticSearch 什么是ElasticSearch ElasticSearch特点 ElasticSearch用途 ElasticSearch底层实现 ElasticSearc ...
- Elasticsearch学习笔记一
Elasticsearch Elasticsearch(以下简称ES)是一款Java语言开发的基于Lucene的高效全文搜索引擎.它提供了一个分布式多用户能力的基于RESTful web接口的全文搜索 ...
- AJax 学习笔记二(onreadystatechange的作用)
AJax 学习笔记二(onreadystatechange的作用) 当发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态XMLHttpRequest对象提供了on ...
- java之jvm学习笔记二(类装载器的体系结构)
java的class只在需要的时候才内转载入内存,并由java虚拟机的执行引擎来执行,而执行引擎从总的来说主要的执行方式分为四种, 第一种,一次性解释代码,也就是当字节码转载到内存后,每次需要都会重新 ...
- NumPy学习笔记 二
NumPy学习笔记 二 <NumPy学习笔记>系列将记录学习NumPy过程中的动手笔记,前期的参考书是<Python数据分析基础教程 NumPy学习指南>第二版.<数学分 ...
- golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息
golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...
随机推荐
- SNF软件开发机器人-子系统-功能-启用大按钮样式如何配置
启用大按钮 当启用大按钮被选中后,页面的按钮图表将以按钮配置中的大按钮样式显示. 1.效果展示: 2.使用说明: 打开显示页面,点击开发者选项的简单配置按钮.在功能表信息中选择启用大按钮复选框后保存.
- 利用百度API(js),怎样通过地址获取经纬度
根据经纬度找到具体地址:http://api.map.baidu.com/geocoder?location=纬度,经度&output=输出格式类型&key=用户密钥如:http:// ...
- Asp.Net \uxxx Unicode编码解码
/// <summary> /// Unicode编码 /// </summary> /// <param name="str"></pa ...
- [转]kindeditor隐藏上传图片框网络图片或本地上传的功能
原文地址:http://www.lingchenliang.com/post/154.html kindeditor富文本编辑器点击上传图片按钮,在弹出的窗口中去掉上传网络图片的功能,只留下本地上传, ...
- 【Java编码规范】《阿里巴巴Java开发手册(正式版)》【转载】
2017年开春之际,诚意献上重磅大礼:阿里巴巴Java开发手册,首次公开阿里官方Java代码规范标准.这套Java统一规范标准将有助于提高行业编码规范化水平,帮助行业人员提高开发质量和效率.大大降低代 ...
- java 中 热部署与卸载关系
今天发现早年在大象笔记中写的一篇笔记,之前放在ijavaboy上的,现在它已经访问不了了.前几天又有同事在讨论这个问题.这里拿来分享一下. 在web应用开发或者游戏服务器开发的过程中,我们时时刻刻都在 ...
- springboot 工程启动报错之Consider defining a bean of type ‘XXX’ in your configuration.
一.前言: 使用springboot自动注入的方式搭建好了工程,结果启动的时候报错了!!!,错误如下图: Description: Field userEntityMapper in com.xxx. ...
- .net读取Excel转datatable、.net读取的Excel存在合并单元格并且转成datatable
项目中经常会遇到Excel导入数据,Excel的模板会可能是存在合并单元格的,模板如下图所示 读取时需要填充合并单元格的值,转成datatable单元格值时,填充合并单元格的值,如下图所示: 合并单元 ...
- 【CF961G】Partitions 第二类斯特林数
[CF961G]Partitions 题意:给出n个物品,每个物品有一个权值$w_i$,定义一个集合$S$的权值为$W(S)=|S|\sum\limits_{x\in S} w_x$,定义一个划分的权 ...
- 解决:Windows安装Composer及全局配置时提示部分.dll结尾的php扩展文件找不到指定的模板
当安装Composer或者全局配置时出现.dll扩展文件找不到指定模板,如下图: 解决办法: 打开php.ini,将extension_dir 改为绝对路径即可 例如: