Elasticsearch:具有多个搜索词的 multi_matchphrase_prefix 查询

Nic*_*mer 3 elasticsearch

我有一个数据库,其中包含以下条目

title: This is my awesome title
abstract: A more detailed descriptions of what [...]
Run Code Online (Sandbox Code Playgroud)

我想构建一个与上述文档匹配的 Elasticsearch 查询,例如

awe detai
Run Code Online (Sandbox Code Playgroud)

用单词来说:具有多个搜索词的 multi_matchphrase_prefix 查询。(这旨在用作“键入时搜索”功能。)

我知道如何组合 multi_match 和phrase_prefix,但我不清楚如何对多个搜索词执行此操作。

有什么提示吗?

Vol*_*hat 5

嗯,有几种方法可以做到这一点

POST stack/autocomplete/1
{
  "title": "This is my awesome title",
  "abstract": "A more detailed descriptions of what"
}
Run Code Online (Sandbox Code Playgroud)

然后您可以使用带有星号的查询字符串进行搜索,但这里的问题是您需要附加星号来查询

POST stack/autocomplete/_search
{
  "query": {
    "query_string": {
      "fields": [
        "title",
        "abstract"
      ],
      "query": "awe* detai*"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果你想匹配用户查询那么你可以这样使用

POST stack/autocomplete/_search
{
  "query": {
    "multi_match": {
      "fields": [
        "title",
        "abstract"
      ],
      "query": "awesome tit",
      "type": "phrase_prefix"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

另一个需要考虑的选择是将nGram与查询字符串一起使用,这样您就不需要修改用户查询“awe* detai*”