gpt4 book ai didi

Elasticsearch:存储标签不重复

转载 作者:行者123 更新时间:2023-12-03 01:44:13 24 4
gpt4 key购买 nike

我想以一种不会重复的方式将标签存储在我的文档中。

我的文件有 Tags字段定义为:

...
"Tags": { "type": "string" }
...

我将标签添加到它的 Tags来自 Python 的字段:
es.update(index=ES_INDEX, doc_type=ES_DOC_TYPE, id=user_id, body=doc)

我的更新文件:
doc = {
"script": {
"lang": "groovy",
"inline": "ctx._source.Tags.addAll(tags)",
"params": {
"tags": [
"c#",
"winforms",
"type-conversion",
"decimal",
"opacity"
]
}
}
}

这可行,但标签可能会重复。

我想在存储标签之前对标签进行重复数据删除。我基本上想要 Tags字段作为一个集合。

这是我尝试过的(基于此答案: https://stackoverflow.com/a/17465831/318557 )
...
"inline": "ctx._source.Tags.addAll(tags); ctx._source.Tags.unique();",
...

但它没有效果。

是否有一个 Groovy 解决方案来做到这一点?或者,也许 Elasticsearch 提供了一些对存储集的支持?

最佳答案

我不认为这是一个时髦的问题。你在检查正确的对象吗?

我索引了以下文档:

{
"_index": "script",
"_type": "test",
"_id": "AV2Jd1zXM1eNU8lqyoZS",
"_score": 1,
"_source": {
"Tags": [
"tag1",
"decimal"
]
}
}

并调用:
curl -X POST \
http://127.0.0.1:9200/script/test/AV2Jd1zXM1eNU8lqyoZS/_update \
-d '{
"script": {
"lang": "groovy",
"inline": "ctx._source.Tags.addAll(tags); ctx._source.Tags.unique();",
"params": {
"tags": [
"c#",
"winforms",
"type-conversion",
"decimal",
"opacity",
"aaa",
"aaa"
]
}
}
}'

结果:
{
"_index": "script",
"_type": "test",
"_id": "AV2Jd1zXM1eNU8lqyoZS",
"_score": 1,
"_source": {
"Tags": [
"tag1",
"decimal",
"c#",
"winforms",
"type-conversion",
"opacity",
"aaa"
]
}

所以 groovy 在这里工作得很好,用一些 REST 客户端自己检查一下。您可以尝试重新分配集合:
"inline": "ctx._source.Tags = ctx._source.Tags.unique(); ctx._source.Tags += tags.unique();",

也许这更多是 Python 代码的问题?

关于Elasticsearch:存储标签不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45370511/

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