【问题标题】:What's the best way of storing tags into elasticsearch将标签存储到 elasticsearch 中的最佳方式是什么
【发布时间】:2022-11-29 19:23:58
【问题描述】:

我在elasticsearch中有一个索引'product',我想为item添加'environmental','energy-saving','recyclable','medical-grade'之类的标签。我在google之后收集了一些方法:array,nested,少量。

1.使用数组。
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "keyword"
            }
        }
    }
}

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

{
    "query": {
        "bool": {
            "must": {
                "terms": {
                    "tags": [
                        "environmental",
                        "medical-grade"
                    ]
                }
            }
        }
    }
}

2.使用嵌套。
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "nested",
                "properties": {
                    "code": {
                        "type": "text"
                    }
                }
            }
        }
    }
}

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

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

{
    "query": {
        "bool": {
            "must": {
                "terms": {
                    "tags.name": [
                        "environmental",
                        "medical-grade"
                    ]
                }
            }
        }
    }
}

3.使用位。
{
    "mappings": {
        "properties": {
            "tags": {
                "type": "long"
            }
        }
    }
}

它可以间接存储标签,需要指定一个位作为标签。

假设第n位代表第n个标签(二进制):0->'环保',1->'节能',2->'可回收',3->'医疗级'.So 1001(二进制,等于十进制的9)表示它包含'环境'和'医疗级'。

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

{
    "query": {
        "bool": {
            "must": {
                "script": {
                    "script": "doc['tags'].size() != 0 && (doc['tags'].value&9)==9"
                }
            }
        }
    }
}

我不知道他们的表现如何,但我实际上喜欢第三种方式。请给我一些建议或更好的方法。

【问题讨论】:

    标签: elasticsearch tags


    【解决方案1】:

    我的建议是选择选项 1 并使用数组。它会很容易查询数据,也可以用于聚合。

    选项 2,您可以使用,但我不认为它最适合您的情况,因为您没有嵌套或父子数据,因此没有必要存储为嵌套。

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

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 2012-11-17
      • 1970-01-01
      • 2013-06-14
      • 2016-07-21
      • 2011-09-14
      • 2011-04-02
      • 2011-01-02
      • 2017-12-20
      相关资源
      最近更新 更多