ElasticSearch中的可返回但不可查询的字段

时间:2014-05-02 15:49:02

标签: elasticsearch

我想将数组存储在一个长度可变的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中是否有一种方法可以指定不需要查询给定字段?

3 个答案:

答案 0 :(得分:1)

您可以在映射

的帮助下指定您的数组不进行搜索分析
{
    "array": { 
        "type":     "string",
        "index":    "not_analyzed"
    }
}

其中array是您的字段名称。您可以在Mappings

上阅读有关映射的elasticsearch refrence的更多信息

答案 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