匹配布尔前缀查询

编辑

match_bool_prefix 查询会分析其输入,并根据词项构造一个 bool 查询。除了最后一个词项外,每个词项都在 term 查询中使用。最后一个词项在 prefix 查询中使用。例如,一个 match_bool_prefix 查询:

resp = client.search(
    query={
        "match_bool_prefix": {
            "message": "quick brown f"
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      match_bool_prefix: {
        message: 'quick brown f'
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    match_bool_prefix: {
      message: "quick brown f",
    },
  },
});
console.log(response);
GET /_search
{
  "query": {
    "match_bool_prefix" : {
      "message" : "quick brown f"
    }
  }
}

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

resp = client.search(
    query={
        "bool": {
            "should": [
                {
                    "term": {
                        "message": "quick"
                    }
                },
                {
                    "term": {
                        "message": "brown"
                    }
                },
                {
                    "prefix": {
                        "message": "f"
                    }
                }
            ]
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      bool: {
        should: [
          {
            term: {
              message: 'quick'
            }
          },
          {
            term: {
              message: 'brown'
            }
          },
          {
            prefix: {
              message: 'f'
            }
          }
        ]
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    bool: {
      should: [
        {
          term: {
            message: "quick",
          },
        },
        {
          term: {
            message: "brown",
          },
        },
        {
          prefix: {
            message: "f",
          },
        },
      ],
    },
  },
});
console.log(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 参数配置不同的搜索分析器:

resp = client.search(
    query={
        "match_bool_prefix": {
            "message": {
                "query": "quick brown f",
                "analyzer": "keyword"
            }
        }
    },
)
print(resp)
response = client.search(
  body: {
    query: {
      match_bool_prefix: {
        message: {
          query: 'quick brown f',
          analyzer: 'keyword'
        }
      }
    }
  }
)
puts response
const response = await client.search({
  query: {
    match_bool_prefix: {
      message: {
        query: "quick brown f",
        analyzer: "keyword",
      },
    },
  },
});
console.log(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 子查询。它们对为最后一个词项构造的前缀查询没有任何影响。