elasticsearch6.6文档翻译-查询语句-全文本查询-匹配查询

匹配查询 {#query-dsl-match-query}

match 查询接受文本/数值/日期,分析他们并构造一个查询。例如:

GET /_search
{
    "query": {
        "match" : {
            "message" : "this is a test"
        }
    }
}

注意, message 是一个字段的名字,你能够用任意字段的名字替代它。

匹配 {#query-dsl-match-query-boolean}

match 查询是 boolean
类型的。这意味着文本会被分析,并且分析过程会根据提供的文本构建一个布尔查询。
operator 标志可以设置 or 或者 and 来控制布尔子句(默认为 or)。
匹配 should 子句的最小数量是可选的,可以通过
minimum_should_match 参数设置。

analyzer 可以被设置以控制那个分析器将会执行文本的分析过程。

lenient 参数可以设置为 true 来忽略由于数据类型不匹配导致的异常,
比如尝试用一个文本字符串查询一个数字字段。 lenient 参数默认是
false

模糊 {#query-dsl-match-query-fuzziness}

fuzziness 允许基于被查询的字段的类型模糊匹配。有关被允许的设置,请看
fuzziness

在这种情况下,可以设置 prefix_lengthmax_expansions
来控制模糊过程。 如果设置了模糊选项,查询将会使用
top_terms_blended_freqs_${max_expansions} 作为它的 rewrite
method
fuzzy_rewrite
参数允许控制查询将如何重写。

默认情况下允许模糊转换 (abba) ,但可以通过设置
fuzzy_transpositionsfalse 来禁用。

下面是一个提供附加参数的例子(注意结构稍有变化, message
是字段的名称):

GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "this is a test",
                "operator" : "and"
            }
        }
    }
}

Zero terms query {#query-dsl-match-query-zero}

如果使用的分析器删除了查询中的所有令牌,就像 stop
过滤器做的那样,默认的行为是不会匹配到任何文档。 为了改变
zero_terms_query 选项可以被使用,它接受none (默认)和 all
(相当于一个 match_all 查询)。

GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "to be or not to be",
                "operator" : "and",
                "zero_terms_query": "all"
            }
        }
    }
}

截止频率 {#query-dsl-match-query-cutoff}

match 查询支持 cutoff_frequency ,它允许指定一个绝对的或者相对的文档频率,
其中高频词会被移动到一个可选的子查询中,并且如果是 or 操作的低频词(低于指定的频率)中有一个匹配或者 and 操作的低频词的所有都匹配才会计算评分。

扫描二维码关注公众号,回复: 10289812 查看本文章

这个查询允许在运行时动态的处理 stopwords ,它是领域独立的,并且不需要停止词文件。它防止对高频词计算评分或者迭代,并且如果更有意义或者更低频的词匹配文档的情况下,则只考虑这些词。还有,如果所有的查询关键词的频度都比给定的 cutoff_frequency 高的话,查询将自动地转换为纯联合(and)查询,以确保快速的执行。

如果在 [0..1) 范围内, 则 cutoff_frequency 指的是相对于文档总数的比例,如果大于或者等于 1.0 ,则cutoff_frequency 指的是绝对的文档数量。

下面是一个仅由停止词组成的查询的例子:

GET /_search
{
    "query": {
        "match" : {
            "message" : {
                "query" : "to be or not to be",
                "cutoff_frequency" : 0.001
            }
        }
    }
}

Important

cutoff_frequency 选项以 per-shard-level
来运行。这意味着当尝试用低文档号测试索引时, 你应该遵守
{defguide}/relevance-is-broken.html[Relevance is broken] 的建议。

同义词 {#query-dsl-match-query-synonyms}

match 查询使用 synonym_graph 令牌过滤器来支持 multi-terms
同义词扩展。当使用这个过滤器的时候,解析器将为每一个 multi-terms 同义词创建一个短语查询。 例如,下面的同义词:"ny, new york" 将会产生:

(ny OR ("new york"))

它也可能使用连词来替代匹配多条件的同义词:

GET /_search
{
   "query": {
       "match" : {
           "message": {
               "query" : "ny city",
               "auto_generate_synonyms_phrase_query" : false
           }
       }
   }
}

上面的例子创建了一个布尔查询:

(ny OR (new AND york)) city

这会使用单词 ny 或者 连词 new AND york 匹配文档。默认情况下, 参数 auto_generate_synonyms_phrase_query 被设置为 true

match 的查询系列不会经过 “查询分析” 过程。它不支持字段名称前缀,通配符字符,或者其他的 “高级” 特征。
基于这个原因,它失败的机会很小/不存在,并且当它只分析和运行一个查询行为的文本(通常是一个文本搜索框)时,它提供了一个出色的行为。另外, phrase_prefix 类型可以提供一个很棒的 “即时” 行为来自动的加载搜索结果。

发布了19 篇原创文章 · 获赞 16 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/matt8/article/details/88090755