【发布时间】:2021-09-14 10:24:15
【问题描述】:
我创建了一个索引,其映射如下所示:
{
"corona_data_search_ac_poc" : {
"mappings" : {
"properties" : {
"Country" : {
"type" : "text"
},
"Date" : {
"type" : "text"
},
"IsImplicitIntent" : {
"type" : "boolean"
},
"PopularityScore" : {
"type" : "long"
},
"Query" : {
"type" : "text",
"fields" : {
"query_suggest" : {
"type" : "completion",
"analyzer" : "simple",
"preserve_separators" : true,
"preserve_position_increments" : true,
"max_input_length" : 50
}
}
}
}
}
}
}
示例文档如下所示:
{"Date": "01-01-2020", "Query": "coronavirus is deadly", "IsImplicitIntent": true, "Country": "United States", "PopularityScore": 1}
我正在使用Query.query_suggest 进行自动补全。为此,我使用摄取管道中的脚本生成Query 字段的后缀列表。
例如,如果"Query": "coronavirus is deadly",那么
"Query.query_suggest" 应该是这样的:
"query_suggest" : {
"input" : [
"coronavirus is deadly",
"is deadly",
"deadly"
]
}
现在,我可以使用以下脚本生成后缀列表:
{
"script": {
"source": """
def tokens = new ArrayList(Arrays.asList(/\s+/.split(ctx.Query)));
def nbTokens = tokens.size();
def input = [];
for (def i = nbTokens; i > 0; i--) {
input.add(tokens.join(" "));
tokens.remove(0);
}
# how to assign the list to the inner field?
ctx.Query.query_suggest = [
'input': input
]
"""
}
}
我不确定如何将列表分配给内部字段(请参阅上面脚本中的注释),以便 ES 可以在该数据之上构建自动完成图?
注意:如果我在映射中将query_suggest 定义为与Query 相同的级别,然后在脚本中分配像ctx.query_suggest 这样的值,那么它可以正常工作。
【问题讨论】:
标签: elasticsearch