2014-05-02 43 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

相關問題