2016-03-30 28 views
2

Terim bir değer dizisine eklenmenin bir yolu var mı? ÖrneğinElasticsearch - terim nasıl eklenir?

benim belge aşağıdaki gibiyse:

{ 
    "items": ["item1", "item2", "item3"] 
} 

ben buna "item4" ve "item5" eklemek istiyorsunuz.

2 sorguda yapmalı mıyım? Mevcut değer listesini yüklemek için bir, ve o listeyi güncellemek için? veya bu öğeleri bir sorguda eklememe izin verecek daha zarif bir yol var mı?

Böyle elastic4s ile yapmak çalışıyorum:

, ben harika komut dosyalarını etkinleştirmeniz gerekir ve ben birden çok öğe ile bunu nasıl emin değilim Yukarıdaki kod parçacığını kullanmak için
client.execute(ElasticDsl.update id id in indexName/documentType script { 
    script(s"ctx._source.items += tag").params(Map("tag"->"item4")) 
}) 

.

Herhangi bir fikrin var mı?

+1

Basit bir şekilde iki sorgu ile yapabilirsiniz. Ancak, özel komut dosyasını [1] kullanabilirsiniz (http://stackoverflow.com/questions/18028280/elasticsearch-upserting-and-appending-to-array), [2] (http://stackoverflow.com/questions/31142729/bir sorgu ile yapmak için elasticsearch-field-list-array-değilse-bir-var-öğe-ekle). – pkhlop

+0

@pkhlop Teşekkürler. Birden fazla ürüne ne dersiniz? bunu nasıl yapabilirim? – Tomer

cevap

4

Bunu nasıl başarabileceğinize tam bir örnek.

diziye yeni değerler Birleştirme ve yapmak o eşsiz sonra:

DELETE test/test/1 

POST test/test/1 
{ 
    "terms":["item1", "item2", "item3"] 
} 

GET test/test/1 

POST test/test/1/_update 
{ 
    "script" : " ctx._source.terms << newItems; ctx._source.terms = ctx._source.terms.flatten().unique()", 
    "params" : { 
     "newItems" : ["a","b"] 
    } 
} 

emin scripting

user:/etc/elasticsearch# head elasticsearch.yml 
script.inline: true 
script.indexed: true 
... 
+1

Denemeye çalışırken bir istisna alıyorum: "sebep": "Böyle bir özellik yok: sınıf için ctx: 73fa07c80e9d5eb75065 herhangi bir fikir? – Tomer

+1

cevabındaki güncellemeyi gör, inline script'i etkinleştirmelisin – pkhlop

+0

Teşekkürler .. bunu groovy bağımlılığı ekleyerek düzeltmeyi başardım benim build.sbt için, Sorgu çalıştı, ama sonuç beklendiği gibi değildi: .. "(var "şartlar": ["item1", "item2", "item3", ["item4", "item5"] Bunu düzeltmek için herhangi bir yolu? – Tomer