2014-05-02 44 views
0

我想将数组存储在长度可变的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} 
} 

从而使聚集的结果如下(使用“0”,“1”,“2”,“3”字段和)

{ 
    "array": {"0": 5, "1": 5, "2": 5, "3": 5} 
} 

但似乎随着散列大小的增加,elasticsearch减慢了写入的速度,可能是由于这样一个事实,即索引这些字段,认为我可能会在这些字段上进行查询。这不是必需的,我只需要能够在出路时获得合并(总结)的结果。

这是对情况的合理评估吗?如果是这样,在elasticsearch中是否有一种方法可以指定给定的字段不需要查询?

回答

0

@cmwright这听起来有点奇怪,主要是为了搜索而建立的东西,不允许字段被搜索:)但是,你当然可以做的是在你的索引中定义一个字段不要通过映射进行分析。更多信息Elastic Search Mapping Core Types。我不直接回答你的问题,但我希望至少你能找到一些线索来找出可能的解决方案。

+0

我理解这里介绍的困境。我希望能够根据搜索返回数据,因此仍然按照预期使用软件。我只是不需要搜索文档 – cmwright

+0

中的所有*字段也@cpard,它看起来像“索引”字段只适用于数据库如何解析字符串/文本。是否有另一个字段,我跳过了? – cmwright

+0

@cmwright我很抱歉,因为我完全错误地解释了你所说的关于将数组存储为哈希的问题。 ES允许使用脚本模块的聚合函数,请参见[链接](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-aggregations-metrics-sum- aggregation.html)和这个[link](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/modules-scripting.html)。说实话,我现在没有具体的答案,但我会看看我是否可以将Sum函数与一些脚本相结合。 – cpard

1

您可以指定数组与映射

{ 
    "array": { 
     "type":  "string", 
     "index": "not_analyzed" 
    } 
} 

其中array是你的字段名的帮助下,没有分析搜索。你可以阅读更多关于弹性搜索映射的文章Mappings

相关问题