2013-03-30 11 views
15

Próbuję zrozumieć, jak zaktualizować indeksowany dokument w Elasticsearch. Nie rozumiem, jak to działa? Co to jest API, o którym mówi API? Powiedzmy, że masz dokument z zagnieżdżonymi dokumentami, co musisz zrobić, aby go zaktualizować?Aktualizacja zindeksowanego dokumentu w Elasticsearch

Jaka jest różnica między usunięciem dokumentu, a następnie zindeksowaniem "zaktualizowanej" wersji w porównaniu do zwykłej aktualizacji?

Odpowiedz

34

Żądanie aktualizacji pobiera źródło z elasticsearch, modyfikuje je i przywraca do elastycznego wyszukiwania. Jeśli masz już kopię dokumentu przy użyciu aktualizacji, nie ma sensu. Generalnie szybciej byłoby po prostu zaindeksować nową wersję. Jeśli jednak dokument nie jest łatwo dostępny, ale wiesz, jakie zmiany chciałbyś wprowadzić do dokumentu, bardziej skuteczne może być użycie aktualizacji. Na przykład, jeśli nie mam kopię dokumentu samochodu, ale chcę, aby dodać nowy twórca mogę zrobić coś takiego:

curl -XDELETE localhost:9200/test 
curl -XPUT localhost:9200/test -d '{ 
    "settings": { 
     "index.number_of_shards": 1, 
     "index.number_of_replicas": 0 
    }, 
    "mappings": { 
     "car": { 
      "properties": { 
       "creators" : { 
        "type": "nested", 
        "properties": { 
         "name": {"type":"string"} 
        } 
       } 
      } 
     } 
    } 
} 
' 
curl -XPOST localhost:9200/test/car/1 -d '{ 
    "creators": [{ 
     "name": "Steve" 
    }] 
} 
' 
echo 
curl -XPOST localhost:9200/test/car/1/_update -d '{ 
    "script" : "ctx._source.creators += new_creator", 
    "params" : { 
     "new_creator" : {"name": "John"} 
    } 
}' 
echo 
curl "localhost:9200/test/car/1?pretty=true" 
echo 

W skrypcie aktualizacji ctx jest specjalną zmienną, która pozwala aby uzyskać dostęp do źródła obiektu, który chcesz zaktualizować. ctx._source jest zapisywalną wersją źródła. Możesz modyfikować ten dokument w skrypcie, a zmodyfikowane źródło będzie zachowane jako nowa wersja dokumentu.

+0

Dziękuję za kolejną wspaniałą odpowiedź :) Abyś zrobił metodę aktualizacji w aplikacji Java najpierw usuwając dokument, a następnie ponownie go indeksuj. – LuckyLuke

+9

Nie trzeba najpierw usuwać dokumentu. Możesz po prostu go zaindeksować. Jeśli dokument o tym samym identyfikatorze już istnieje, zostanie automatycznie usunięty i zastąpiony nową wersją. – imotov

+0

Niesamowite, dziękuję. – LuckyLuke