我想将数组存储在一个长度可变的elasticsearch文档中。理想情况下,当使用聚合查询时,可以合并此数组。由于业务逻辑,任何查询的数组都将具有相同的长度,但索引中将有不同的长度数组。以下是两个示例文档:
{
"array": [1, 2, 3, 4],
"test1": "testing123",
"test2": "testing_another"
}
{
"array": [4, 3, 2, 1],
"test1": "testing123",
"test2": "testing_another"
}
通过聚合,我希望获得包含
的结果{
"array": [5, 5, 5, 5]
}
我认为这样做的唯一方法是将数组存储为哈希值,然后可以在聚合中对值进行求和:
{
"array": {"0": 4, "1": 3, "2": 2, "3": 1}
}
{
"array": {"0": 1, "1": 2, "2": 3, "3": 4}
}
这样聚合的结果就像(使用和#34; 0"," 1"," 2"," 3"字段)
{
"array": {"0": 5, "1": 5, "2": 5, "3": 5}
}
但似乎随着散列大小的增加,elasticsearch会降低写入速度,这可能是因为这些字段的索引正在考虑我可能会查询它们。这不是必需的,我只需要能够在出路上获得合并(求和)的结果。
这是对情况的合理评估吗?如果是这样,在elasticsearch中是否有一种方法可以指定不需要查询给定字段?
答案 0 :(得分:1)
您可以在映射
的帮助下指定您的数组不进行搜索分析{
"array": {
"type": "string",
"index": "not_analyzed"
}
}
其中array
是您的字段名称。您可以在Mappings
答案 1 :(得分:0)
@cmwright要求主要用于搜索的东西听起来有点奇怪,不允许字段可搜索:)尽管如此,你当然可以做的是在你的索引中定义一个字段而不是通过映射分析。更多信息Elastic Search Mapping Core Types。我不直接回答你的问题,但我希望至少你能找到一些线索来找出可能的解决方案。
答案 2 :(得分:0)
我不确定散列的大小是否是导致问题的原因,但我在elasticsearch 6.2文档中找到了两个字段映射参数,允许您指定不应查询字段。
使用index = False禁用该特定字段的索引。未编制索引的字段不可查询。
使用enabled = False禁用该字段及其所有子项的索引(和所有处理)(仅适用于对象字段)
来源: https://www.elastic.co/guide/en/elasticsearch/reference/6.2/mapping-index.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.2/enabled.html