2017-09-14 12 views
0

私はES 2.3.3を実行しています。私は分析されていないStringを索引にしたいが、それを特定の文字数に切り捨てたい。ドキュメントによると、ignore_aboveプロパティは、指定された値よりも上のフィールドのインデックスを作成しません。私はそれを望んでいない。私は潜在的に30Kの長さで10Kの長さになるかもしれないが、引き続き保持されている10Kをフィルタリングして並べ替えることができるフィールドを言うとします。Elasticsearch 2.3.xの切り詰めとインデックス文字列の値

これはES 2.3.3で可能ですか、ドキュメントを索引付けする前にJavaを使用してこれを行う必要がありますか。

答えて

0

解析されていない文字列をインデックスしたいが、それを特定の文字数に切り捨てたい。

Update API and Upsert optionと技術的には可能ですが、ご自身のご要望によっては、それほど便利ではない場合があります。

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

いますが、それが唯一の5文字を​​持つようにnameフィールドを切り捨てる必要があります。

はあなたがインデックスにこの文書をしたいとしましょう。更新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 = 1)指定されたIDを持つ文書が見つからない場合は、それがインデックス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 
    } 
} 
関連する問題