массовый индекс в Elasticsearch, только если do c отсутствует - PullRequest
1 голос
/ 20 июня 2020

с использованием пакета API elasticsearch можно проиндексировать документы следующим образом:

 for doc in shingles:
            actions.append({
                "_op_type": "index",
                "_index": index_name,
                '_id': hashed_id,
                "content_completion": {
                    "input": [doc],
                    "weight": 1
                }
            })
    helpers.bulk(self.es, actions)

Но мне нужно только индексировать данные, и если только do c отсутствует в индексе. Как я могу добиться этого с помощью массового API?

1 Ответ

1 голос
/ 20 июня 2020

В elasti есть опция c поиск при индексировании документа

если вы установите op_type = create, тогда он будет создавать документы только в том случае, если он не существует, в противном случае он не будет работать и вернет ошибки для этого документа

POST _bulk/
{ "index" : { "_index" : "test", "_id" : "1" ,**"op_type":"create"** } }
{ "field1" : "value1" }
{ "delete" : { "_index" : "test", "_id" : "2" } }
{ "create" : { "_index" : "test", "_id" : "3" } }
{ "field1" : "value3" }
{ "update" : {"_id" : "1", "_index" : "test"} }
{ "doc" : {"field2" : "value2"} }

Вот ссылка на то же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...