Elasticsearch - 如何追加术语?
Elasticsearch - how to append term?
有没有办法将术语附加到值数组中?
例如,如果我的文档如下所示:
{
"items": ["item1", "item2", "item3"]
}
我想附加 "item4" 和 "item5"。
我必须在 2 个查询中完成吗?一个加载当前值列表,然后更新该列表?还是有更优雅的方式让我在一个查询中追加这些项目?
我正在尝试像这样用 elastic4s 来做:
client.execute(ElasticDsl.update id id in indexName / documentType script {
script(s"ctx._source.items += tag").params(Map("tag"->"item4"))
})
为了使用上面的代码片段,我需要启用 groovy 脚本,但我不确定如何对多个项目执行此操作。
有什么想法吗?
这里有一个完整的例子来说明如何实现这一点。
将新值合并到数组并在以下之后使其唯一:
DELETE test/test/1
POST test/test/1
{
"terms":["item1", "item2", "item3"]
}
GET test/test/1
POST test/test/1/_update
{
"script" : " ctx._source.terms << newItems; ctx._source.terms = ctx._source.terms.flatten().unique()",
"params" : {
"newItems" : ["a","b"]
}
}
确保您在服务器配置
中启用了scripting
user:/etc/elasticsearch# head elasticsearch.yml
script.inline: true
script.indexed: true
...
尝试在您使用的 code.If 中使用 'terms' 过滤器,您正在使用 NEST 然后关注 link 将很有用 https://nest.azurewebsites.net/nest/writing-queries.html
有没有办法将术语附加到值数组中?
例如,如果我的文档如下所示:
{
"items": ["item1", "item2", "item3"]
}
我想附加 "item4" 和 "item5"。
我必须在 2 个查询中完成吗?一个加载当前值列表,然后更新该列表?还是有更优雅的方式让我在一个查询中追加这些项目?
我正在尝试像这样用 elastic4s 来做:
client.execute(ElasticDsl.update id id in indexName / documentType script {
script(s"ctx._source.items += tag").params(Map("tag"->"item4"))
})
为了使用上面的代码片段,我需要启用 groovy 脚本,但我不确定如何对多个项目执行此操作。
有什么想法吗?
这里有一个完整的例子来说明如何实现这一点。
将新值合并到数组并在以下之后使其唯一:
DELETE test/test/1
POST test/test/1
{
"terms":["item1", "item2", "item3"]
}
GET test/test/1
POST test/test/1/_update
{
"script" : " ctx._source.terms << newItems; ctx._source.terms = ctx._source.terms.flatten().unique()",
"params" : {
"newItems" : ["a","b"]
}
}
确保您在服务器配置
中启用了scriptinguser:/etc/elasticsearch# head elasticsearch.yml
script.inline: true
script.indexed: true
...
尝试在您使用的 code.If 中使用 'terms' 过滤器,您正在使用 NEST 然后关注 link 将很有用 https://nest.azurewebsites.net/nest/writing-queries.html