小编Whi*_*ngs的帖子

使用Elasticsearch完成提示器获得与输入不同的输出

我最近从Elasticsearch 1.4升级到了5.4,并且正在努力高效地迁移自动完成查询。问题是我想要一个完成建议器,其中输出与输入不同。

我存储的文档有一个类别字段,该类别基本上是带有URI的字符串数组(因为它们形成一棵树)。URI的最后一部分,我称之为“标签”,是完成提示器中的输入,但是作为响应,我想检索完整的URI。

假设我有两个文件:

{
    "name" : "Lord of The Rings",
    "categories" : ["Books/Genre/Fantasy", "Books/Language/English"]
}
Run Code Online (Sandbox Code Playgroud)

{
    "name" : "Game of Thrones",
    "categories" : ["Series/Genre/Fantasy", "Series/Host/HBO"]
}
Run Code Online (Sandbox Code Playgroud)

我的输入是“ Fant”,我想作为响应获得“系列/类型/幻想”和“书籍/类型/幻想”类别的URI。

在以前的ES 1.4中,我能够为给定的输入创建具有不同输出的完成提示,因此我对索引的建议如下:

{
    "suggest" : {
        "input": [ "Fantasy"],
        "output": "Series/Genre/Fantasy"
    }
}
Run Code Online (Sandbox Code Playgroud)

{
    "suggest" : {
        "input": [ "Fantasy"],
        "output": "Books/Genre/Fantasy"
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在ES 5.4中,对于完成提示者来说,输出属性不再存在,因此,我在响应中得到的只是input我的“建议”字段的属性,即“ Fantasy”标签,但是我需要URI。

现在,我的解决方法是在响应categories_source属性中查找返回的每个文档的字段,并过滤具有以输入“ Fant”开头的标签的类别。这是非常低效的,因为我需要将每个返回文档的每个类别映射到其标签中以检查输入。

使用ES建议者没有更有效的方法吗?我想念什么?

elasticsearch search-suggestion elasticsearch-5

3
推荐指数
1
解决办法
630
查看次数