匹配布尔前缀查询编辑

match_bool_prefix 查询会分析其输入并从中构造一个 bool 查询。 除了最后一个词之外,每个词都用于 term 查询。 最后一个词用于 prefix 查询。 像这样的 match_bool_prefix 查询

response = client.search(
  body: {
    query: {
      match_bool_prefix: {
        message: 'quick brown f'
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "match_bool_prefix" : {
      "message" : "quick brown f"
    }
  }
}

其中分析产生词项 quickbrownf,类似于以下 bool 查询

response = client.search(
  body: {
    query: {
      bool: {
        should: [
          {
            term: {
              message: 'quick'
            }
          },
          {
            term: {
              message: 'brown'
            }
          },
          {
            prefix: {
              message: 'f'
            }
          }
        ]
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "bool" : {
      "should": [
        { "term": { "message": "quick" }},
        { "term": { "message": "brown" }},
        { "prefix": { "message": "f"}}
      ]
    }
  }
}

match_bool_prefix 查询和 match_phrase_prefix 之间的一个重要区别是,match_phrase_prefix 查询将其词项作为短语匹配,但 match_bool_prefix 查询可以在任何位置匹配其词项。 上面的示例 match_bool_prefix 查询可以匹配包含 quick brown fox 的字段,但也可以匹配 brown fox quick。 它还可以匹配包含词项 quick、词项 brown 和以 f 开头的词项的字段,这些词项出现在任何位置。

参数编辑

默认情况下,match_bool_prefix 查询的输入文本将使用查询字段映射中的分析器进行分析。 可以使用 analyzer 参数配置不同的搜索分析器

response = client.search(
  body: {
    query: {
      match_bool_prefix: {
        message: {
          query: 'quick brown f',
          analyzer: 'keyword'
        }
      }
    }
  }
)
puts response
GET /_search
{
  "query": {
    "match_bool_prefix": {
      "message": {
        "query": "quick brown f",
        "analyzer": "keyword"
      }
    }
  }
}

match_bool_prefix 查询支持 minimum_should_matchoperator 参数,如 match 查询 中所述,将设置应用于构造的 bool 查询。 在大多数情况下,构造的 bool 查询中的子句数将是查询文本分析产生的词项数。

fuzzinessprefix_lengthmax_expansionsfuzzy_transpositionsfuzzy_rewrite 参数可以应用于为除最后一个词之外的所有词构造的 term 子查询。 它们对为最后一个词构造的前缀查询没有任何影响。