2、Match All Query //匹配所有document

时间:2021-12-14 07:56:15

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