2017-09-14 90 views
0

我正在運行ES 2.3.3。我想索引一個未分析的字符串,但將其截斷爲一定數量的字符。根據文檔,ignore_above屬性不會索引超出所提供值的字段。我不想那樣。我想要說一個可能長達30K的字段並將其縮短到10K長,但仍然可以對保留的10K進行篩選和排序。Elasticsearch 2.3.x中的截斷和索引字符串值

這在ES 2.3.3中是可行的還是我需要在索引文檔之前使用Java來完成此操作。

回答

0

我想索引一個未分析的字符串,但將其截斷爲一定數量的字符。

從技術上講,它可能與Update API and Upsert option,但根據您的確切需要,它可能不是很方便。

比方說,你要索引此文檔:

{ 
    "name": "foofoofoofoo", 
    "age": 29 
} 

,但你需要截斷name字段,以便它只有5個字符。使用更新的API,你必須執行一個腳本:

POST http://localhost:9200/insert/test/1/_update 
{ 
    "script" : "ctx._source.name = ctx._source.name.substring(0,5);", 
    "scripted_upsert": true, 
    "upsert" : { 
     "name": "foofoofoofoo", 
     "age": 29 
    } 
} 

這意味着,如果ES沒有找到與給定的ID(這裏ID = 1)的文件,它應該索引裏面upsert文檔元素,並執行給定的腳本。正如你所看到的,如果你想自動生成id,這很不方便,因爲你必須在URI中提供id。

結果:

GET http://localhost:9200/insert/test/1 
{ 
    "_index": "insert", 
    "_type": "test", 
    "_id": "1", 
    "_version": 1, 
    "found": true, 
    "_source": { 
     "name": "foofo", 
     "age": 29 
    } 
}