有没有一种方法可以通过关键字和属性使elasticsearch(5.5)自动完成搜索?

时间:2019-06-27 19:37:10

标签: java elasticsearch vue.js autocomplete elasticsearch-query

可以说我们有["first name", "phone number", "city", "last name"]之类的属性。 elasticsearch是否有可能基于1个关键字从每个属性返回建议。例如,搜索"phil"可以把Phil叫回城市,把费城的名字叫回城市,把philer的名字给城市?

我已经进行了研究,但找不到确切的答案。我试图避免将最大建议从自动完成更改为类似100 suggestions,并在前端Vue代码或后端Java代码中对其进行处理。

现在我正在使用完成提示器,elasticsearchsorted based on weight。如果将最大建议设置为10或特定数字,则建议始终是每个关键字10个建议。有没有一种方法可以使建议随机化?我现在也在使用弹性搜索5.5

我想写一个elasticsearch query来按关键字和属性搜索并返回几个属性的建议,而不仅仅是每次都返回权重最高的属性。

1 个答案:

答案 0 :(得分:0)

在查询中,您可以添加多个建议者,因此对于每个单独的字段,您都可以请求建议。

如果您的映射看起来像这样:

{
  "mappings": {
    "properties": {
      "first_name": {
        "type": "text",
        "fields": {
          "suggest": {
            "type": "completion"
          }
        }
      },
      "city": {
        "type": "text",
        "fields": {
          "suggest": {
            "type": "completion"
          }
        }
      }
    }
  }
}

您的查询可能如下所示:

POST myindex/_search
{
    "suggest": {
        "first_name_suggest" : {
            "prefix" : "phil", 
            "completion" : { 
                "field" : "first_name.suggest" 
            }
        },
        "city_suggest" : {
            "prefix" : "phil", 
            "completion" : { 
                "field" : "city.suggest" 
            }
        }
    }
}

有关completion suggesterssuggesters in general的更多信息,请参见文档。