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查询相关推荐

  1. elasticsearch 查询(match和term)

    elasticsearch 查询(match和term) es中的查询请求有两种方式,一种是简易版的查询,另外一种是使用JSON完整的请求体,叫做结构化查询(DSL). 由于DSL查询更为直观也更为简 ...

  2. es查询语句拼接 java_JAVA使用ElasticSearch查询in和not in的实现方式

    JAVA使用ElasticSearch查询in和not in的实现方式 发布时间:2020-08-22 16:03:11 来源:脚本之家 阅读:119 作者:执笔记忆的空白 ElasticSearch ...

  3. ElasticSearch查询 第四篇:匹配查询(Match)

    <ElasticSearch查询>目录导航: ElasticSearch查询 第一篇:搜索API ElasticSearch查询 第二篇:文档更新 ElasticSearch查询 第三篇: ...

  4. Elasticsearch查询性能优化

    constant_score的用处 当我们不关心检索词频率TF(Term Frequency)对搜索结果排序的影响时,可以使用constant_score将查询语句query或者过滤语句filter包 ...

  5. 【Elasticsearch】Elasticsearch 查询过程中的 pre-filter 原理

    1.概述 转载:添Elasticsearch 查询过程中的 pre-filter 原理 大家都知道在对索引执行查询的时候,需要在所有的分片上执行查询,因为无法知道被查询的关键词位于哪个分片,对于全文查 ...

  6. 【Elasticsearch】Elasticsearch查询参数batched_reduce_size的解释

    1.概述 当我们使用Elasticsearch查询数据时,如果数据量非常大时,会命中大量分片中的大量数据,可能会造成集群内存异常,此时可以通过一个高级参数batched_reduce_size进行控制 ...

  7. Go Elasticsearch 查询快速入门

    文章目录 0.前言 1.根据 ID 查询 2.精确匹配单个字段 3.精确匹配单个字段的多个值 4.全文查询 5.范围查询 6.判断某个字段是否存在 7.bool 组合查询 must filter sh ...

  8. 为什么Elasticsearch查询变得这么慢了?

    Elasticsearch 最少必要知识实战教程直播回放 0.引言 Elasticsearch社区中经常看到慢查询问题:"你能帮我看看Elasticsearch的响应时间吗?"或者 ...

  9. 助你掌握搜索神器,10个实用的Elasticsearch查询技巧

    前言   Elasticsearch是一个非常流行的搜索引擎,已经成为了许多企业的首选解决方案.然而,我们要想成为一个优秀的程序员,就必须掌握各种查询技巧.本文将向大家介绍10个实用的Elastics ...

  10. Elasticsearch:Elasticsearch 查询示例 - 动手练习(一)

    在我之前的文章文章: Elasticsearch:有用的 Elasticsearch 查询示例 开始使用 Elasticsearch (2) 我列举了很多关于 Elasticsearch 查询的例子. ...

最新文章

  1. websocket session超时_SSE(ServerSent Events):替代websocket完成服务器推送
  2. 【CF】474E Pillars
  3. Oracle的LINUX安装
  4. ppt给图片增加高斯模糊_制作PPT时,图片不清晰你如何处理?
  5. IDEA导入Eclipse项目
  6. AndroidStudio_安卓原生开发_搭建AdnroidStudio环境并配置SDK---Android原生开发工作笔记136
  7. pytrhon画图matplolib
  8. “迷失自我”,请记住下面5个网站,让你受益终身
  9. Atitit  自动化gui 与 发帖机 技术
  10. MySQL DELETE语句和TRUNCATE TABLE语句的区别
  11. arcgis超级工具安装教程_ArcGIS超级工具SPTOOLS1.7升级说明
  12. 电影海报的字体如何设计?——黎乙丙
  13. Spring中AOP的实现原理
  14. AutoRunner 功能自动化测试项目实训之第一个实战案例(四)
  15. 云计算需要学什么内容 学完可以胜任哪些岗位
  16. Exception thrown at 0x00007FF7A7B64FB3 in xx.exe: 0xC0000005: Access violation reading location 0x00
  17. ORA-12514:TNS:监听程序当前无法识别连接描述符中请求的服务
  18. Request method ‘POST‘ not supported
  19. 2022河南萌新联赛第(二)场:河南理工大学(赛后总结)
  20. 关于python-docx自动生成word文档的总结

热门文章

  1. 最小生成树(prime算法、kruskal算法) 和 最短路径算法(floyd、dijkstra)
  2. Sql Server2005一則怪現象
  3. python入门到精通需要学多久-从Python入门到精通,你只需要在马哥教育待四个月...
  4. python详细下载安装教程-Pycharm及python安装详细教程
  5. python下载图片-Python下载URL图片
  6. python读数据-python读取各种文件数据方法解析
  7. python代码编辑器排行榜-写 Python 哪个编辑器 / IDE 最好用?
  8. php和python web开发-php与python谁更适合web开发?为什么?
  9. python3爬虫入门教程-python3爬虫入门程序
  10. python web-Java web 和 Python web??