elasticsearch查询
1、查询方式
有两种查询方式,一种是通过在url中指定查询条件 ,另外一种是通过DSL查询。都是使用GET方法
1.1 分页查询
from | 指定从文档的什么位置开始,默认值0 |
size | 指定一次查询返回多少结果 |
curl 'localhost:9200/library/_search?pretty' -d '{"from":9, "size":20,"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
1.2 返回版本号
设置version的布尔值,默认值是false
curl 'localhost:9200/library/_search?pretty' -d '{"version":true,"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
1.3 分数限制
设置min_score
curl 'localhost:9200/library/_search?pretty' -d '{"min_score":0.75,"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
1.4 设置返回字段
设置fields的数组类型
curl 'localhost:9200/library/_search?pretty' -d '{"fields":["title","year"],"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
1.5 source过滤
设置_source布尔值来控制响应中是否包含_source
curl 'localhost:9200/library/_search?pretty' -d '{"_source":false,"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
设置_source的数组来控制响应中的_source返回字段
curl 'localhost:9200/library/_search?pretty' -d '{"_source":["title","otitle"],"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
设置_source值为包含include,exclude对象来控制响应中的_source返回字段
curl 'localhost:9200/library/_search?pretty' -d '{"_source":{"include":["*"], "exclude":"title"},"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
1.6 使用脚本字段
通过设置script_fields
curl 'localhost:9200/library/_search?pretty' -d '{"script_fields":{"correctYear":{"script":"doc[\"year\"].value - 1800"}},"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
通过设置params将参数传到脚本 中
curl 'localhost:9200/library/_search?pretty' -d '{"script_fields":{"correctYear":{"script":{"source":"doc[\"year\"].value - params.paramYear", "params":{"paramYear":1800}}}},"query":{"query_string":{"query":"title:crime"}}}' -H "Content-Type:application/json"
2、查询过程
2.1 查询类型
通过请求参数search_type来设置,支持的查询类型有
query_then_fetch | 第一步,执行查询得到对文档进行排序和分级所需信息。这一步在所有的分片上执行,然后,只在相关分片上查询文档的实际内容 |
dfs_query_then_fetch | 跟query_then_fetch相似,但它包含一个额外阶段,执行分布式词频的计算 |
curl 'localhost:9200/library/_search?pretty&search_type=query_then_fetch' -d '{"query":{"term":{"title":"crime"}}}' -H "Content-Type:application/json"
2.2 查询偏好
通过设置请求参数preference,支持的类型有
_primary | 只在主分片上执行搜索,不使用副本 |
_primary_first | 如果主分片可用,只在主分片上执行搜索,否则才在其他分片上执行 |
_replica | 只在副本分片上执行执行 |
_replica_first | 如果副本分片可用,只在副本分片上执行搜索,否则才在主分片上执行 |
_local | 在可能的情况下,只在发送请求的节点上的可用分片上执行搜索 |
_only_node:node_id | 只在提供标识符的节点上执行搜索 |
_only_node:node_spec | 只在指定节点描述符的节点上执行搜索。 |
_prefer_node:node_i | 尝试在提供标识符的节点上执行搜索,如果该节点不可用,则使用其他的可用节点。 |
_shards:1,2 | 在提供标识符的分片上执行操作(在这个例子中,分片1和2) |
自定义值 | 可以传入任何自定义字符串值,具有相同值的请求将在相同的分片上执行 |
2.3 搜索分片api
在_search_shards REST端点执行这个API
3、简单查询
3.1 词条查询
词条查询是未经分析的,需要提供精确的词条。可以在词条查询中包含加权属性,它影响给定词条的重要程序。
{
"query": {
"term": {
"title": "crime"
}
}
}
3.2 多词条查询
{
"query": {
"terms": {
"tags": ["novel", "book"]
}
}
}
3.3 match_all查询
能够匹配索引中的所有文档
{
"query": {
"match_all": {}
}
}
也可以在查询中包含加权值,会赋值给所有跟它匹配的文档
{
"query": {
"match_all": {
"boost": 2.0
}
}
}
3.4 exsists查询
查询文档中指定的字段是否存在值。
不存在有以下几种情况
- source中的字段为null或者[]
- 在mapping中字段设置了"index":false
- 在mapping中字段的长度超过了ignore_above
- 在mapping中设置了ignore_malformed,并且字段值格式不对
{
"query": {
"exists": {
"field": "tags"
}
}
}
3.5 常用词查询
在7.3.0中已经过期,不推荐使用
{
"query": {
"common": {
"title": {
"query": "crime and punishment",
"cutoff_frequency": 0.001
}
}
}
}
可用的参数有
query | 实际的查询内容 |
cutoff_frequency | 百分比或者绝对值。这个值用来构建高、低频词组 |
low_freq_operator | 可以设为or或者and。默认是or。用来指定为低频词组构建查询时用到的布尔运算符。如果希望所有的记都在文档中出现才认为是匹配,应该把它设置为and |
high_freq_operator | 可以设为or或者and。默认是or。用来指定为高频词组构建查询时用到的布尔运算符。如果希望所有的记都在文档中出现才认为是匹配,应该把它设置为and |
minimum_should_match | 不使用low_freq_operator和high_freq_operator参数的话,可以使用minimum_should_match参数。和其他查询一样,它允许指定匹配的文档中应该出现的查询词的最小个数 |
boost | 定义赋给文档得分的加权值。 |
analyzer | 定义分析查询文本时用到的分析器名称。默认值是default analyzer |
disable_coord | 默认值为false。它允许启用或禁用分数因子的计算。该计算基于文档中包含的所有查询词的分数 |
3.6 match查询
匹配查询把query中的参数取出,分析然后构造查询。当使用match查询时,会为字段选择合适的查询器,传给match查询的词条将被建立索引时相同的分析器处理。
match查询不支持lucen查询语法 。
{
"query": {
"match": {
"title": "crime and punishment"
}
}
}
3.6.1 布尔匹配查询
分析给定的文本,构造布尔查询。匹配查询的默认类型就是这个。有些参数来控制布尔查询
operator | 取值为or或者and。控制用于连接创建的布尔条件的布尔运算符。默认值是or。如果想要所有的词项满足匹配,需要设置为and运算符。 |
analyzer | 指定用于分析查询文本的分析器名字。默认是default anaylzer. |
fuzziness | 提供允许构造模糊查询的参数值。这个参数值不同场景会有差异。对于数组字段,值为数字。对于日期类型字段,可以设置为millisecond或者time值。对于text类型字段,可以设置为0,1,2,auto |
prefix_length | 控制模糊查询行为 |
max_expansions | 控制模糊查询行为 |
zero_terms_query | 指定当所有词条被分析器移除时的查询行为。可以设置为none,all。默认值是none |
cutoff_frequency | 将查询分成两组:高频词条组和低频词条组。 |
lenient | 取值为ture,false。当设置为true时,忽略由于数据不兼容导致的异常。 |
3.6.2 match_phrase查询
与布尔查询相似,不同的是,它从分析后的文本中构建短语查询,而不是布尔子句。
可用的参数有
slop | 是一个整数值。定义了文本查询中的词条和词条之间可以有多少个未知词条,以被视为跟一个短语匹配。默认值是0,意味着不允许有额外的词条 |
analyzer | 指定用于分析查询文本的分析器名字。默认值是default analyzer. |
3.6.3 match_phrase_prefix查询
与match_phrase查询一样,另外,允许查询文本最后一个词条前缀匹配。
可用的参数除了match_phrase使用的参数外,还包括
max_expansions | 控制有多少前缀被重写成最后的词条 |
3.7 multi_match查询
与match相同,但是支持多字段fields参数。match查询参数可以用于multi_match。独有的参数有
tie_breaker | 指定高分项和低分项的平衡,取值为0-1。当使用的时候,文档分数是最高分项加上所有其它文本匹配字段分数乘以tie_breaker |
3.8 query_string查询
支持lucene查询语法。支持的参数有
query | 指定查询文本 |
default_field | 指定默认的查询字段。默认值为index.query.default_field属性指定,默认为_all |
default_operator | 指定默认的逻辑运算符(or或and),默认为or |
analyzer | 指定用于分析query参数的分析器名称 |
allow_leading_wildcard | 指定是否允许通配符作为词条的第一个字符,默认为true |
auto_generate_synonyms_phrase_query | 布尔值。设置为true时,会为多词条同义词自动创建匹配短语查询,默认值为true |
enable_position_increments | 布尔值。指定查询结果中的位置增量是否打开 ,默认是true |
fuzzy_max_expansions | 使用模糊查询时,指定模糊查询可被扩展到的最大词条数,默认是50 |
fuzzy_prefix_length | 指定生成的模糊查询中的前缀长度,默认为0. |
phrase_slop | 指定短语溢出值,默认为0 |
boost | 指定使用的加权值,默认为1.0 |
analyze_wildcard | 指定是否应该分析通配符查询生成的词条,默认为false |
fields | 字符串数组。用于查询的字段数组 |
minimum_should_match | 控制有多少生成的boolean should子句必须与文档匹配,才能认为它是匹配的。可以是百分比,也可以是整数值。 |
fuzziness | 控制模糊查询的行为 |
max_determined_states | 默认是10000。用于设置处理正则表达查询时自动机可以持有的状态数。 |
fuzzy_transpositions | 布尔值。模糊匹配的编辑包括两个相邻字符的换位。默认为true。 |
time_zone | 设置用于在日期字段作区间查询的时区 |
lenient | 布尔值。如果设置为true,格式方面的失败将被忽略 |
quote_analyzer | 字符串。用于将查询字符串中的引用文本转成标识的分析器。对于default_field默认是search_quote_analyzer |
quote_field_suffix | 字符串。添加到查询字符串中引用文本的后缀 |
rewrite | 字符串。用于重写查询的方法。 |
3.9 simple_query_string查询
与query_string相似,支持lucene查询语法。但是当解析失败时,不会抛出异常。
支持参数有query,fields,default_operator,analyzer,lowercase_expanded_terms,locale,lenient,minimum_should_match
3.10 标识符查询
用于_uid字段,所以要求禁用_id字段
{
"query": {
"ids": {
"values": ["1", "2", "3"]
}
}
}
3.11 prefix查询
基于某个字段前缀匹配来匹配文档
{
"query": {
"prefix": {
"title": "cri"
}
}
}
3.12 fuzzy查询
用于查找值与给定值相似的文档。词条相似性基于编辑距离算法计算。
{
"query": {
"fuzzy": {
"title": "crme"
}
}
}
支持的参数有
value | 指定实际的查询 |
boost | 指定查询的加权值。默认是1.0 |
fuzziness | 控制生成的模糊查询行为 |
prefix_length | 差异词条的公共前缀长度,默认是0 |
max_expansions | 指定查询扩展的最大词条数,默认是无界的。 |
3.13 wildcard查询
允许使用*和?通配符。也支持加权
{
"query": {
"wildcard": {
"title": "cr?me"
}
}
}
3.14 range查询
查找字段值在某一区间,可用于数值也可用于字符串、日期。用于单字段,并且查询参数需要封装到字段名称。
支持的参数
gte | 值大于等于给定值 |
gt | 值大于给定值 |
lte |
值小于等于给定值 |
lt | 值小于给定值 |
3.15 regexp查询
查询文本中允许使用正则表达式
{
"query": {
"regexp": {
"title": {
"value": "cr.m[ae]",
"boost": 10.0
}
}
}
}
3.16 more_like_this查询
查询得到与提供的类似的文档。支持的参数有
fields | 用于查询的字段数组。默认是_all |
like | 支持两种形式,一种是文本,另外一种是数组。提供返回的文档需要与其相似的值。 |
unlike | 与like修改,是要求不相似 |
min_term_freq | 定义文档中词条的最低词频,低于此频率的词条会忽略。默认是2 |
max_query_terms | 任何生成的查询包含的最大词条数,默认是25 |
stop_words | 定义一个单词的数组,当比较文档和查询时,这些单词被忽略。默认是空数组 |
min_doc_freq | 定义包含某词条的文档的最小数目,低于此数目时,该词条将被忽略。默认值是5 |
max_doc_freq | 定义包含某词条的文档的最大数目,高于此数目时,该词条将被忽略。默认是没有限制 |
min_word_len | 单词的最小长度,低于此长度的单词被忽略,默认值是0 |
max_word_len | 单词的最大长度,高于此长度的单词被忽略,默认值是无限制 |
boost_terms | 词条加权值,默认是0 |
boost | 用于查询的加权值。默认是1 |
include | 指定是否文档在查询的返回结构中是否包含。默认是false,表示输入文档不应该包含。 |
minimum_should_match | 控制在文档中需要匹配的词条数。默认是30% |
analyzer | 用于分析给定文本的分析器名字。 |
3.17 type查询
在7.0.0中已经过期,不推荐使用
{
"query": {
"type": {
"value": "_doc"
}
}
}
4、复合查询
4.1 bool查询
可以封装无查询,通过should,must或者must_not连接。
连接方式
should | 被封装的查询可能匹配,也可能不匹配。匹配的should节点数目由minimum_should_match控制 |
must | 被封装的查询必须匹配,文档才会返回 |
must_not | 被封装的查询必须不被匹配,文档才会返回 |
支持的参数
filter | 指定查询的部分被作为过滤器 |
boost | 指定查询的加权值,默认是1.0 |
minimum_should_match | 匹配要求should子句必须匹配的最小数目 |
disable_coord | 默认值为false。允许启用或禁用分数因子的计算。该计算是基于文档包含的所有查询词条。 |
4.3 dis_max查询
返回所有子查询的并集。支持的参数queries,tie_breaker,boost
4.4 boosting查询
封装两个查询,并且降低其中一个查询返回文档的得分。有三个节点需要定义
positive | 查询对象,必选项。文档得分保持不变的查询 |
negative | 查询对象,必选项。文档得分降低的查询 |
negative_boosting | 必选项,float类型。用于降低第二部分查询得分的加权值 |
4.5 constant_score查询
封装另一个查询,为封装查询返回的每个文档返回一个常量得分。通过使用boost属性指定分数,默认是1.0
最外一层的支持的参数为
filter | 必选项。过滤查询。 |
boost | 可选项,float类型,默认值1.0 |
4.6 indices查询
提供的节点
indices | 索引列表 |
query | 在索引列表上查询 |
not_match_query | 在其它的索引上执行 |
5、span查询
5.1 span_term查询
{
"query": {
"span_term": {
"description": {
"value": "world",
"boost": 5.0
}
}
}
}
5.2 span_firsts查询
{
"query": {
"span_first": {
"match": {
"span_term": {
"description": "world"
}
},
"end": 2
}
}
}
5.3 span_near查询
{
"query": {
"span_near": {
"clauses": [{
"span_term": {
"description": "world"
}
},
{
"span_term": {
"description": "everyone"
}
}
],
"slop": 0,
"in_order": true
}
}
}
5.4 span_or查询
{
"query": {
"span_or": {
"clauses": [{
"span_first": {
"match": {
"span_term": {
"description": "world"
}
},
"end": 2
}
},
{
"span_near": {
"clauses": [{
"span_term": {
"description": "world"
}
},
{
"span_term": {
"description": "everyone"
}
}
],
"slop": 1,
"in_order": true
}
}
]
}
}
}
5.5 span_not查询
5.6 span_within查询
5.7 span_containing查询
5.8 span_multi查询
elasticsearch查询相关推荐
- elasticsearch 查询(match和term)
elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...
- es查询语句拼接 java_JAVA使用ElasticSearch查询in和not in的实现方式
JAVA使用ElasticSearch查询in和not in的实现方式 发布时间:2020-08-22 16:03:11 来源:脚本之家 阅读:119 作者:执笔记忆的空白 ElasticSearch ...
- ElasticSearch查询 第四篇:匹配查询(Match)
<ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...
- Elasticsearch查询性能优化
constant_score的用处 当我们不关心检索词频率TF(Term Frequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者过滤语句filter包 ...
- 【Elasticsearch】Elasticsearch 查询过程中的 pre-filter 原理
1.概述 转载:添Elasticsearch 查询过程中的 pre-filter 原理 大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查 ...
- 【Elasticsearch】Elasticsearch查询参数batched_reduce_size的解释
1.概述 当我们使用Elasticsearch查询数据时,如果数据量非常大时,会命中大量分片中的大量数据,可能会造成集群内存异常,此时可以通过一个高级参数batched_reduce_size进行控制 ...
- Go Elasticsearch 查询快速入门
文章目录 0.前言 1.根据 ID 查询 2.精确匹配单个字段 3.精确匹配单个字段的多个值 4.全文查询 5.范围查询 6.判断某个字段是否存在 7.bool 组合查询 must filter sh ...
- 为什么Elasticsearch查询变得这么慢了?
Elasticsearch 最少必要知识实战教程直播回放 0.引言 Elasticsearch社区中经常看到慢查询问题:"你能帮我看看Elasticsearch的响应时间吗?"或者 ...
- 助你掌握搜索神器,10个实用的Elasticsearch查询技巧
前言 Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案.然而,我们要想成为一个优秀的程序员,就必须掌握各种查询技巧.本文将向大家介绍10个实用的Elastics ...
- Elasticsearch:Elasticsearch 查询示例 - 动手练习(一)
在我之前的文章文章: Elasticsearch:有用的 Elasticsearch 查询示例 开始使用 Elasticsearch (2) 我列举了很多关于 Elasticsearch 查询的例子. ...
最新文章
- websocket session超时_SSE(ServerSent Events):替代websocket完成服务器推送
- 【CF】474E Pillars
- Oracle的LINUX安装
- ppt给图片增加高斯模糊_制作PPT时,图片不清晰你如何处理?
- IDEA导入Eclipse项目
- AndroidStudio_安卓原生开发_搭建AdnroidStudio环境并配置SDK---Android原生开发工作笔记136
- pytrhon画图matplolib
- “迷失自我”,请记住下面5个网站,让你受益终身
- Atitit 自动化gui 与 发帖机 技术
- MySQL DELETE语句和TRUNCATE TABLE语句的区别
- arcgis超级工具安装教程_ArcGIS超级工具SPTOOLS1.7升级说明
- 电影海报的字体如何设计?——黎乙丙
- Spring中AOP的实现原理
- AutoRunner 功能自动化测试项目实训之第一个实战案例(四)
- 云计算需要学什么内容 学完可以胜任哪些岗位
- Exception thrown at 0x00007FF7A7B64FB3 in xx.exe: 0xC0000005: Access violation reading location 0x00
- ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
- Request method ‘POST‘ not supported
- 2022河南萌新联赛第(二)场:河南理工大学(赛后总结)
- 关于python-docx自动生成word文档的总结
热门文章
- 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
- Sql Server2005一則怪現象
- python入门到精通需要学多久-从Python入门到精通,你只需要在马哥教育待四个月...
- python详细下载安装教程-Pycharm及python安装详细教程
- python下载图片-Python下载URL图片
- python读数据-python读取各种文件数据方法解析
- python代码编辑器排行榜-写 Python 哪个编辑器 / IDE 最好用?
- php和python web开发-php与python谁更适合web开发?为什么?
- python3爬虫入门教程-python3爬虫入门程序
- python web-Java web 和 Python web??