匹配布尔前缀查询

匹配布尔前缀查询 #

match_bool_prefix 匹配布尔前缀查询分析提供的搜索字符串,并从字符串的词项中创建一个布尔查询。它将除最后一个词项外的每个词项作为完整单词进行匹配。最后一个词项用作前缀。 match_bool_prefix 查询返回包含完整单词词项或以前缀词项开头的词项的文档,顺序不限。

以下示例展示了一个基本的 match_bool_prefix 查询:

GET _search
{
  "query": {
    "match_bool_prefix": {
      "title": "the wind"
    }
  }
}

要传递额外参数,您可以使用扩展语法:

GET _search
{
  "query": {
    "match_bool_prefix": {
      "title": {
        "query": "the wind",
        "analyzer": "stop"
      }
    }
  }
}

参数说明 #

例如,考虑一个包含以下文档的索引:

PUT testindex/_doc/1
{
  "title": "The wind rises"
}

PUT testindex/_doc/2
{
  "title": "Gone with the wind"

}

以下 match_bool_prefix 查询会搜索整个词 rises 以及以 wi 开头的词,顺序不限:

GET testindex/_search
{
  "query": {
    "match_bool_prefix": {
      "title": "rises wi"
    }
  }
}

前面的查询等同于以下布尔查询:

GET testindex/_search
{
  "query": {
    "bool" : {
      "should": [
        { "term": { "title": "rises" }},
        { "prefix": { "title": "wi"}}
      ]
    }
  }
}

响应包含两个文档:

{
  "took": 15,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1.73617,
    "hits": [
      {
        "_index": "testindex",
        "_id": "1",
        "_score": 1.73617,
        "_source": {
          "title": "The wind rises"
        }
      },
      {
        "_index": "testindex",
        "_id": "2",
        "_score": 1,
        "_source": {
          "title": "Gone with the wind"
        }
      }
    ]
  }
}

match_bool_prefix 和 match_phrase_prefix 查询 #

match_bool_prefix 查询匹配任何位置的词,而 match_phrase_prefix 查询匹配整个短语。为了说明区别,再次考虑上一节的 match_bool_prefix 查询:

GET testindex/_search
{
  "query": {
    "match_bool_prefix": {
      "title": "rises wi"
    }
  }
}

The wind risesGone with the wind 都匹配了搜索词,因此查询返回了这两份文档。

现在在同一索引上运行一个 match_phrase_prefix 查询:

GET testindex/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": "rises wi"
    }
  }
}

响应返回没有文档,因为没有任何文档包含按指定顺序出现的 rises wi 短语。

分词器 #

默认情况下,当你在一个 text 字段上运行查询时,搜索文本会使用与该字段关联的索引分词器进行分析。你可以在 analyzer 参数中指定不同的搜索分词器:

GET testindex/_search
{
  "query": {
    "match_bool_prefix": {
      "title": {
        "query": "rise the wi",
        "analyzer": "stop"
      }
    }
  }
}

参数说明 #

该查询将字段名称( <field> )作为顶级参数接受:

GET _search
{
  "query": {
    "match_bool_prefix": {
      "<field>": {
        "query": "text to search for",
        ...
      }
    }
  }
}

<field> 接受以下参数。除 query 外,所有参数都是可选的。

参数数据类型描述
queryString用于搜索的文本、数字、布尔值或日期。必填。
analyzerString用于对查询字符串文本进行分词的分词器。默认值为为 default_field 指定的索引时分词器。如果未为 default_field 指定分词器,则 analyzer 为索引的默认分词器。有关 index.query.default_field 的更多信息,请参阅动态索引级索引设置。
fuzzinessAUTO 、 0 或正整数在确定一个词是否匹配一个值时,将一个词改为另一个词所需的字符编辑次数(插入、删除、替换)。例如, wined 和 wind 之间的距离是 1。默认值 AUTO 根据每个词的长度选择值,对于大多数用例是一个不错的选择。
fuzzy_rewriteString确定 Easysearch 如何重写查询。有效值为 constantscore 、 scoring_boolean 、 constant_score_boolean 、 top_terms_N 、 top_terms_boost_N 和 top_terms_blended_freqs_N 。如果 fuzziness 参数不是 0 ,查询默认使用 fuzzy_rewrite 方法的 top_terms_blended_freqs${max_expansions} 。默认值为 constant_score 。
fuzzy_transpositionsBoolean将 fuzzy_transpositions 设置为 true (默认)会在 fuzziness 选项的插入、删除和替换操作中添加相邻字符的交换。例如,如果 fuzzy_transpositions 为真(交换“n”和“i”),则 wind 和 wnid 之间的距离为 1;如果为假(删除“n”,插入“n”),则距离为 2。如果 fuzzy_transpositions 为假, rewind 和 wnid 与 wind 的距离相同(2),尽管从更以人为中心的观点来看, wnid 是一个明显的拼写错误。对于大多数用例,默认值是一个不错的选择。
max_expansions正整数查询可以扩展到的最大词数。模糊查询会扩展到与指定距离( fuzziness )内的匹配词。然后 Easysearch 尝试匹配这些词。默认值为 50 。
minimum_should_match正整数或负整数、正百分比或负百分比、或者这些类型组合如果查询字符串包含多个搜索词并且你使用 or 运算符,文档被考虑为匹配所需的匹配词数。例如,如果 minimum_should_match 为 2, wind often rising 不匹配 The Wind Rises. 如果 minimum_should_match 为 1 ,则匹配。详情请参阅 Minimum should match。
operatorString如果查询字符串包含多个搜索词,是否所有词都需要匹配( and )或只需要一个词匹配( or )才能认为文档匹配。有效值为 or 和 and 。默认值是 or 。
prefix_length非负整数不考虑模糊性的前导字符数量。默认为 0 。