Elasticsearch Query DSL-Full text queries
作者:互联网
Full text queries 全文搜索
Intervals 允许对匹配项的顺序和接近度进行细粒度控制。
Match 标准的全文搜索方式
GET /_search { "query": { "match": { "message": { "query": "this is a test" } } } }
它背后的查询机制:字段在索引时已经由分词器分词,而查询时也对语句进行分词(默认使用跟字段或index相同的分词器,也可以指定),默认的词语匹配规则是or关系(也可以设为and,and表示所有词语都要匹配,但没有顺序关系),因此搜索到的结果实际就是匹配到的词语多和少的问题,可以使用minimum_should_match控制最少匹配数量。
match块内的参数支持:
<field>
- 必须,查询的目标字段。
<field>块内支持的参数:
query
- 必须,查询的条件,查询前会先进行分词,可以是text、number、boolean、date。
analyzer
- 可选(string),对query的分词器,默认是目标字段的analyzer或index的analyzer
auto_generate_synonyms_phrase_query
-
(可选, Boolean,默认true)如果为true,将自动为多术语同义词创建 match phrase 。
fuzziness
- (可选, string) 最大fuzziness可编辑距离。数字或AUTO。
max_expansions
- (可选, integer) Maximum number of terms to which the query will expand. Defaults to
50
. prefix_length
- (可选, integer) 模糊匹配保持不变的起始字符数。默认值为0。
fuzzy_transpositions
- (可选, Boolean,默认true) 如果为true,则模糊匹配的编辑包括两个相邻字符(ab)的换位→ ba)。
fuzzy_rewrite
-
(Optional, string) Method used to rewrite the query. See the
rewrite
parameter for valid values and more information.If the
fuzziness
parameter is not0
, thematch
query uses afuzzy_rewrite
method oftop_terms_blended_freqs_${max_expansions}
by default. lenient
- (Optional, Boolean) If
true
, format-based errors, such as providing a textquery
value for a numeric field, are ignored. Defaults tofalse
. operator
-
(可选, string) OR 或 AND ,默认OR
minimum_should_match
-
(可选, string) 最少匹配数量。
zero_terms_query
-
(Optional, string) 如果分词器删除所有tokens(例如使用
stop
filter时),是否不返回任何文档。默认none表示不返回,可选all表示返回全部文档
Match boolean prefix 实际上该名称就是Match 的 Match prefix版
对条件进行分词,转为多个terms,并对最后一个term使用前缀查询,
GET /_search { "query": { "match_bool_prefix" : { "message" : "quick brown f" } } }
等同于
GET /_search { "query": { "bool" : { "should": [ { "term": { "message": "quick" }}, { "term": { "message": "brown" }}, { "prefix": { "message": "f"}} ] } } }
可以使用参数:
operator
、analyzer、 minimum_should_match
Match phrase
以短语相邻的要求进行搜索,有顺序性,可以使用slop控制相邻度,默认slop是0。
对条件中的分词要全部匹配。
例如对于 this is a test 可以使用
{ "query": { "match_phrase": { "message": { "query":"this test", "slop":2 } } } } 由于顺序性,上面的查询不会匹配 test a is thisMatch phrase prefix
如同Match boolean prefix ,对最后一个词语使用前缀查询
GET /_search { "query": { "match_phrase_prefix": { "message": { "query": "quick brown f" } } } }
支持以下参数:
query 必须
analyzer
(可选, string)
max_expansions
(可选, integer) Maximum number of terms to which the last provided term of the query
value will expand. Defaults to 50
.
slop
(可选, integer) Maximum number of positions allowed between matching tokens. Defaults to 0
. Transposed terms have a slop of 2
.
zero_terms_query
(可选, string) none默认,all
Combined fields
允许对多个字段进行全文搜索。
GET /_search { "query": { "combined_fields" : { "query": "database systems", "fields": [ "title", "abstract", "body"], "operator": "and" } } }
支持参数:
fields
(必须, array of strings) 一组需要查询的字段,只能是text类型,他们必须具有相同的analyzer
。
query
(必须, string)
auto_generate_synonyms_phrase_query
(可选, Boolean) If true
, match phrase queries are automatically created for multi-term synonyms. Defaults to true
.
operator
(可选, string) or默认,and
minimum_should_match
(可选, string)
zero_terms_query
(可选, string) none默认,all
Multi-match 允许对多个字段mtach查询
GET /_search { "query": { "multi_match" : { "query" : "this is a test", "fields" : [ "subject^3", "message","*_name" ] } } }
如果fields不指定字段,则使用index.query.default_field
,即默认是*
.*
multi_match 支持的类型:
|
(默认) 文档匹配任意字段,评分选择最佳匹配的字段 |
|
文档匹配任意字段,评分从各个匹配的字段进行组合 |
|
使用相同的分析器处理字段,就像它们是一个大字段一样。在任何字段中查找每个单词。 |
|
使用 |
|
使用 |
|
使用 |
Query string query 可以使用query_string查询创建包含通配符、跨多个字段搜索等的复杂搜索。虽然通用,但查询是严格的,如果查询字符串包含任何无效语法,则返回错误。因为它会为任何无效语法返回一个错误,所以不建议对搜索框使用query string查询。
语法:查询字符串被解析为一系列term和operator,查询字符串可以是单词或短语,例如"quick brown"将以phrase方式顺序性的搜索。
未完待续...
Simple query string 使用语法有限但容错的解析器。虽然它的语法比query string查询更受限制,但simple query string查询不会返回无效语法的错误。相反,它会忽略查询字符串的任何无效部分。
未完待续...
标签:Full,匹配,string,text,prefix,DSL,phrase,query,match 来源: https://www.cnblogs.com/FangfangXu/p/15503815.html