大数据利器Elasticsearch之全文本查询之match查询

这是我参与8月更文挑战的第9天,活动详情查看:8月更文挑战api

本Elasticsearch相关文章的版本为:7.4.2markdown

返回与提供的文本、数字、日期或布尔值匹配的文档。注意点:在匹配以前根据所查询的字段调用此字段的analyzer进行分析提供的文本。post

match查询是执行全文搜索的标准查询,包括用于模糊匹配的选项。测试

建立测试数据

POST /match_test/_doc/1
{
  "my_text": "my Favorite food is cold porridge"
}

POST /match_test/_doc/2
{
  "my_text": "when it's cold my favorite food is porridge"
}
复制代码

match查询例子

请求数据:spa

POST /match_test/_search
{
  "query": {
    "match": {
      "my_text": "Favorite"
    }
  }
}
复制代码

相应数据:code

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.19363809,
    "hits" : [
      {
        "_index" : "match_test",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.19363809,
        "_source" : {
          "my_text" : "my Favorite food is cold porridge"
        }
      },
      {
        "_index" : "match_test",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.17225473,
        "_source" : {
          "my_text" : "when it's cold my favorite food is porridge"
        }
      }
    ]
  }
}
复制代码

由于match查询会对输入的数据进行分词处理,Favorite通过standard analyzer处理后就是favorite了,因此同时命中doc1和doc2。orm

match查询的参数

  • query索引

  • (必需)您但愿在提供的 <field>.ip

    在执行搜索以前,match查询会分析任何提供的文本。这意味着match查询能够搜索text"文本数据类型"分析标记的字段,而不是精确的术语。文档

  • analyzer

  • (可选,字符串)[分析器]用于将query 值中的文本转换为标记。默认为field映射的[索引分析器]。若是没有映射分析器,则使用索引的默认分析器。

  • fuzziness

  • (可选,字符串)容许匹配的最大编辑距离。

  • max_expansions

  • (可选,整数)查询将扩展到的最大分词数。默认为50.

  • prefix_length

  • (可选,整数)用于模糊匹配的起始字符数保持不变。默认为0.

  • fuzzy_transpositions

  • (可选,布尔值)若是true,模糊匹配的编辑包括两个相邻字符的换位(ab → ba)。默认为true.

  • operator

  • (可选,字符串)用于解释query值中文本的布尔逻辑。有效值为:

    • OR (默认)

      例如,querycapital of Hungary被解释为capital OR of OR Hungary

    • AND

      例如,querycapital of Hungary被解释为capital AND of AND Hungary

  • minimum_should_match

  • (可选,字符串)必须与要返回的文档匹配的最小子句数。