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查询

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kgduu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值