gpt4 book ai didi

elasticsearch - 使用 elasticsearch completion suggester 获得不同于输入的输出

转载 作者:行者123 更新时间:2023-11-29 02:54:33 27 4
gpt4 key购买 nike

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

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

假设我有两个文档:

{
"name" : "Lord of The Rings",
"categories" : ["Books/Genre/Fantasy", "Books/Language/English"]
}

{
"name" : "Game of Thrones",
"categories" : ["Series/Genre/Fantasy", "Series/Host/HBO"]
}

我的输入是“奇幻”,我想获得“系列/流派/奇幻”和“图书/流派/奇幻”类别的 URI 作为响应。

以前使用 ES 1.4,我能够为给定的输入创建一个具有不同输出的完成建议器,所以我这样索引我的建议器:

{
"suggest" : {
"input": [ "Fantasy"],
"output": "Series/Genre/Fantasy"
}
}

{
"suggest" : {
"input": [ "Fantasy"],
"output": "Books/Genre/Fantasy"
}
}

但是在 ES 5.4 中,完成建议器的输出属性不再存在,所以我在响应中得到的只是建议字段的 input 属性,即标签“Fantasy”,但我想要 URI。

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

难道没有更有效的方法来使用 ES suggesters 来做到这一点吗?我错过了什么?

最佳答案

Elasticsearch 的完成建议器已从 5.0 更改。删除索引建议条目时指定输出的支持。现在建议结果条目的文本始终是建议输入的未分析值(与在 5.0 之前的索引中索引建议时不指定输出相同)。所以你需要添加 output作为 suggest 的兄弟字段 key 在 body 里。
它应该是这样的:

映射:

{
"mappings": {
"<type>" : {
"properties" : {
"suggest" : {
"type" : "completion"
},
"output" : {
"type": "keyword"
}
}
}
}
}

不要忘记替换 <type>使用您的索引类型。

索引:

/<index_name>/<type_name>

{
"suggest" : {
"input": ["Fantasy"],
"weight" : 1
},
"output": "Series/Genre/Fantasy"
}

这里,字段名output可以用任何东西代替,它只是您文档的元数据。

查询:

/<index_name>/_search

{
"suggest": {
"show-suggest" : {
"prefix" : "Fant",
"completion" : {
"field" : "suggest"
}
}
}
}

希望对您有所帮助。

关于elasticsearch - 使用 elasticsearch completion suggester 获得不同于输入的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45440340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com