首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在elasticsearch中存储标记的最佳方法是什么

在elasticsearch中存储标记的最佳方法是什么
EN

Stack Overflow用户
提问于 2022-11-29 10:00:20
回答 1查看 25关注 0票数 0

我在elasticsearch中有一个“产品”索引,我想在项目中添加一些标签,比如“环保”、“节能”、“可回收”、“医疗等级”。我在google之后收集了一些方法:数组,嵌套,位。

1.使用数组。

代码语言:javascript
复制
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "keyword"
            }
        }
    }
}

它可以直接存储标签的名字。包含“环境”和“医疗等级”的查询:

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "must": {
                "terms": {
                    "tags": [
                        "environmental",
                        "medical-grade"
                    ]
                }
            }
        }
    }
}

2.使用嵌套。

代码语言:javascript
复制
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "nested",
                "properties": {
                    "code": {
                        "type": "text"
                    }
                }
            }
        }
    }
}

它可以直接存储标签的名字,甚至id或其他。

包含“环境”和“医疗等级”的查询:

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "must": {
                "terms": {
                    "tags.name": [
                        "environmental",
                        "medical-grade"
                    ]
                }
            }
        }
    }
}

3.使用bit。

代码语言:javascript
复制
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "long"
            }
        }
    }
}

它可以间接地存储标记,并且需要将位指定为标记。

假设n位表示n- tag(binary):0->'environmental',1->'energy-saving',2->'recyclable',3->'medical-grade'.So 1001(二进制数,等于小数点中的9)表示它包含“环境”和“医学等级”。

包含“环境”和“医疗等级”的查询:

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "must": {
                "script": {
                    "script": "doc['tags'].size() != 0 && (doc['tags'].value&9)==9"
                }
            }
        }
    }
}

我不知道他们的表现如何,但我喜欢第三条路actually.Please给我一些建议或更好的方式。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-29 10:35:05

我的建议是使用选项1并使用数组。它可以方便地查询数据,也可以用于聚合。

选项2,您可以使用,但我不认为这是最好的情况,因为您没有嵌套或paent子数据,所以没有必要存储为嵌套。

选项3,我不会建议您在查询时使用脚本,这会影响性能。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74612223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档