ElasticSearch的“match_phrase_prefix”查询出现问题

s5a0g9ez  于 2022-12-03  发布在  ElasticSearch
关注(0)|答案(2)|浏览(260)

我在使用match_phrase_prefix进行查询时遇到了问题。例如,假设我有一个display_name =“stack overflow”的记录。如果我使用“stack”或“stack over”进行查询,它会找到该记录,但如果我尝试使用“stack o”,它就不会找到。我注意到以前有人问过这个问题,问题是与前缀有关,但我似乎没有找到正确的答案。有什么想法吗?

j2qf4p5b

j2qf4p5b1#

其返回的单据为stack o,可以按照下面的例子来查看它。

索引Map

{
  "mappings": {
    "properties": {
      "display_name": {
        "type": "text"
      }
    }
  }
}

索引文档

{
   "display_name" : "stack overflow"
}

搜索查询

{
    "query": {
        "match_phrase_prefix" : {
            "display_name" : {
                "query" : "stack o"
            }
        }
    }
}

并返回上面索引的文档

"hits": [
         {
            "_index": "so-60620921-match-prefix",
            "_type": "_doc",
            "_id": "1",
            "_score": 0.5753642,
            "_source": {
               "display_name": "stack overflow"
            }
         }
      ]

您甚至可以查看官方ES文档示例,它返回quick brown f的文档。

nc1teljy

nc1teljy2#

您应该尝试增加max_expansions的值(预设值为50here
注意也不要设置得太高,否则会有减慢查询速度的风险!
所以你可以试试这个:

{
    "query": {
        "match_phrase_prefix": {
            "display_name": {
                "query": "stack o",
                "max_expansions": 100,
            }
        }
    }
}

相关问题