# 匹配查询

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-match-query.html)（修改该链接为官网对应的链接）

译文链接 : [http://www.apache.wiki/pages/viewpage.action?pageId=4882547](http://www.apache.wiki/pages/viewpage.action?pageId=4882547)（修改该链接为 ApacheCN 对应的译文链接）

贡献者 :  @羊两头

## 匹配查询

匹配查询可以接受文本、数字及日期数据，进行分析然后构造查询。

例如：

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

```

注意：message是字段名称，你可以替换任何字段的名称

## match-匹配查询

       匹配查询的类型为boolean。 这意味着分析所提供的文本，并且在分析过程中根据所提供的文本构建一个boolean查询。 运算符标志可以设置为or或and控制布尔子句（默认为or）。 可以使用minimum_should_match这个参数来设置要匹配的可选的should子句的最小数量。

       分析器可以设置为控制哪个分析器将对文本执行分析处理。 它默认为字段显式映射定义或默认搜索分析器。

       lenient参数可以设置为true，用于忽略由数据类型不匹配引起的异常，例如：尝试使用文本查询字符串查询数字字段。 默认为false。

## Fuzziness-模糊查询

      模糊查询是允许基于被查询字段类型的模糊匹配。 有关允许的设置，请参阅“Fuzzinessedit”一节。

      在这种情况下可以设置prefix_length和max_expansions用以控制模糊过程。 如果设置fuzzy选项，查询将使用top_terms_blended_freqs _ $ {max_expansions}作为其重写方法，fuzzy_rewrite参数将允许如何控制查询进行重写。

      默认情况下允许模糊转置（ab→ba），但可以通过将fuzzy_transpositions设置为false来禁用。

      这里是一个提供附加参数的例子（注意结构中的细微变化，消息是字段名称）

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

```

## Zero terms query-零短语查询

      如果所使用的分析器在像停止过滤器这样的查询中删除所有短语，则默认行为是根本不匹配任何文档。 为了可以更改能够接受none（默认）和所有对应于match_all的选项zero_terms_query：

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

```

## Cutoff frequency--截断频率--**这段实在不知咋翻译，求大神代装逼**

       匹配查询支持cutoff定义，其允许指定绝对或相对文档频率，其中高频项被移动到可选子查询中，并且只计算在低频（低于截止）短语项或所有低频短语中的运算符进行匹配。

       (通俗来说,当定义了Cutoff frequency之后,Elasticsearch会对该匹配的词条分为两种类型的词条,高频词条(类似于停顿词一样出现频率很高)和低频词条,低频词条会转换成一个必须进行匹配的子查询,而

        高频词条则会转换成另一个可选的子查询,该子查询只有在文档中的确匹配到了低频词条之后才会执行,这样如果低频词条没有匹配到任何文档,则该子查询则不会执行,这样一来就在某种程度上提升查询性能,因为bool查询的子查询越多,性能就越受到影响)

 此查询允许在运行时动处理属于独立于域的且不需要停用词文件的停用词。 它防止评分/迭代高频短语，并且仅当如果有更重要/更低频率的短语匹配文档时才被考虑。 然而，如果所有查询词语都高于给定的cutoff_frequency，则查询被自动转换为纯连接（和）查询以确保快速执行

       如果cutoff_frequency 在范围[0..1]内，或者绝对值大于或等于1.0，则cutoff文档可以相对于文档的总数。

       以下示例仅显示由禁用词组成的查询：

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

```

```
cutoff_frequency选项在每个分片级别上运行。 这意味着当在低文档编号的测试索引上尝试时，您应参考破坏相关性章节中的建议。
```

## Comparison to query_string / field--查询字符串与字段的比较

        查询的匹配系列不通过“查询解析”过程。 它不支持字段名称前缀，通配符或其他“高级”功能。 因此它提供了一个很好的行为，当它只是分析和运行该文本作为一个查询行为（这通常是一个文本搜索框）查询失败的机会非常小或者不存在。 此外，phrase_prefix类型可以提供一个强大的功能：当你输入时自动加载搜索结果。