elasticsearch - Elasticsearch - 如何为摄取管道中的内部字段提供价值
问题描述
我创建了一个索引,其映射如下所示:
{
"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
解决方案
您的字段映射Query
不正确。您将无法索引您期望的内容,因为查询字段是类型text
并且不会接受建议字段所需的相同输入,它们必须是单独的字段。
您需要在顶层有两个单独的字段:
"Query" : {
"type" : "text"
},
"Query_Suggest": {
"type" : "completion",
"analyzer" : "simple",
"preserve_separators" : true,
"preserve_position_increments" : true,
"max_input_length" : 50
}
然后索引这个:
PUT test/_doc/1?pipeline=my-pipeline
{
"Query": "coronavirus is deadly"
}
将产生这个:
{
"Query" : "coronavirus is deadly",
"Query_Suggest" : {
"input" : [
"coronavirus is deadly",
"is deadly",
"deadly"
]
}
}
推荐阅读
- jquery - 如何检查下拉菜单是否打开并添加类
- angular - 使用 Angular 在视图初始化后填充 DOM
- node.js - 将日期时间字符串转换为本地日期时间
- javascript - Async / Await cause a loop
- parsing - 使用闭包作为参数和返回值,是 Fn 还是 FnMut 更惯用?
- react-native - add a view to window in react native
- java - Progress colored with Dots/Stars in Java
- python - 如何从字典列表中将新的键值对添加到现有的键值对?
- javascript - 输出到输入元素的范围滑块
- python - get the mean var of all columns value and make new column