我们正在使用弹性搜索1.1.0。我们正在尝试使用match_phrase_prefix查询索引,如下所示:
{
"query":{
"match_phrase_prefix" : {
"name" : {
"query" : "Harry Joy"
}
}
}
}
我们有4条名为Harry Joy的唱片。如果我们写全名,上面的查询工作得很好,但是如果我们写了名字和名字的第一个字符,它只返回1个记录而不是4个。
以下查询仅返回1条记录:
{
"query":{
"match_phrase_prefix" : {
"name" : {
"query" : "Harry J"
}
}
}
}
但是以下查询会返回所有4条记录:
{
"query":{
"match_phrase_prefix" : {
"name" : {
"query" : "Harry Jo"
}
}
}
}
我们需要能够在第二个单词中使用单个字符搜索所有4个字符。我们可以在这里做些什么才能使它工作?没有用1个字符搜索并在第二个字中使用2个字符的原因是什么?
这就是我创建索引的方式:
{
"river": "users",
"data": {
"type": "mongodb",
"mongodb": {
"servers": [
{ "host": "localhost", "port": 27017 }
],
"db": "mydb",
"collection": "users",
"gridfs": false
},
"index": {
"name": "susers",
"type": "users"
}
}
}
答案 0 :(得分:0)
对于match_phrase_prefix,max_expansions的默认值为50。 这意味着对于术语“ Harry J” ,elastic将在排序的术语词典中查找前50个术语的“ J” 。它将使用最多50(max_expansions)的字典顺序将其组合到查询中(例如:“ Jane”,“ Joy”,“笑话”)。
(这就是为什么当您的术语为“ Harry Jo” 时会找到所有4条记录的原因,因为在排序的术语词典中更容易找到“ Jo” 前50个词)。
您可以使用以下查询来增加max_expansions: (使用大量的max_expansions会降低性能)
{
"query":{
"match_phrase_prefix" : {
"name" : {
"query" : "Harry J",
"max_expansions" : 100
}
}
}
}