AFei00 2019-06-28
高级全文查询通常用于在全文字段(如电子邮件正文)上运行全文查询,它们了解如何分析被查询的字段,并将在执行之前将每个字段的analyzer(或search_analyzer)应用到查询字符串。
本组中的查询为:
match querymatch_phrase querymatch查询,但用于匹配精确的短语或单词接近匹配。match_phrase_prefix querymatch_phrase查询类似,但是在最后一个单词上执行通配符搜索。multi_match querymatch查询的多字段版本。common terms queryquery_string querysimple_query_string queryquery_string语法的一个更简单、更健壮的版本,适合直接向用户公开。match查询接受文本/数字/日期,分析它们并构造查询,例如:
GET /_search
{
"query": {
"match" : {
"message" : "this is a test"
}
}
}注意,message是字段的名称,你可以替换为任何字段的名称。
match查询是boolean类型的,这意味着提供的文本被分析,并且分析过程从提供的文本构造一个布尔查询,operator标志可以设置为or或and控制布尔子句(默认为or),可以使用minimum_should_match参数设置要匹配的可选should子句的最小数量。
可以设置analyzer来控制哪个分析器将对文本执行分析过程,它默认为字段显式映射定义或默认搜索分析器。
lenient参数可以设置为true以忽略由数据类型不匹配引起的异常,例如尝试用文本查询字符串查询数值字段,默认值为false。
fuzziness允许基于被查询的字段类型进行模糊匹配,查看允许设置的模糊性。
在这种情况下,可以设置prefix_length和max_expansion来控制模糊过程,如果设置了模糊选项,查询将使用top_terms_blended_freqs_${max_expansions}作为其重写方法,fuzzy_rewrite参数允许控制查询如何重写。
模糊互换(ab→ba)在默认情况下都是允许的,但可以通过设置fuzzy_transpositions为false禁用。
这里有一个提供额外参数的例子(注意结构的细微变化,message是字段名):
GET /_search
{
"query": {
"match" : {
"message" : {
"query" : "this is a test",
"operator" : "and"
}
}
}
}