Я новичок вasticsearch и хочу проиндексировать множество предложений для их эффективного поиска.Сначала я пробовал массовое добавление в индекс, но у меня это не получалось, поэтому теперь я добавляю предложения одно за другим, используя следующий фрагмент кода (python):
c = pycurl.Curl()
add_document(c, 'myIndexName', 'someJsonString', 99)
def add_document(c, index_name, js, _id):
c.setopt(c.POST, 1)
c.setopt(c.URL, 'localhost:9200/%s/sentence/%i' % (index_name, _id))
c.setopt(c.POSTFIELDS, json.dumps(js))
c.perform()
Где яЯ увеличиваю идентификатор, и пример входной строки json будет:
{"sentence_id": 2, "article_name": "Kegelschnitt", "paragraph_id": 1, "plaintext": "Ein Kegelschnitt ist der zweidimensionale Sonderfall einer Quadrik .", "postags": "Ein/ART Kegelschnitt/NN ist/VAFIN der/ART zweidimensionale/ADJA Sonderfall/NN einer/ART Quadrik/NE ./$."}
Пока все хорошо, кажется, работает.Я подозреваю, что заставить это работать в режиме массового импорта намного эффективнее, но, поскольку это единовременный процесс, эффективность не является моей главной задачей.Я использую этот запрос (в командной строке), чтобы получить обзор моих индексов:
curl 'localhost:9200/_cat/indices?v'
Что дает мне (для соответствующего индекса):
health status index pri rep docs.count docs.deleted store.size pri.store.size
yellow open wiki_dump_jan2019 5 1 795502 276551 528.1mb 528.1mb
Аналогично,запрос:
curl -XGET 'localhost:9200/wiki_dump_jan2019/sentence/_count?pretty' -H 'Content-Type: application/json' -d '{"query": {"match_all": {}}}'
возвращает
{
"count" : 795502,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
}
}
Сообщая, что в моем индексе 795,502 предложения.
Моя проблема в том, что в общей сложности я делаю более 23 миллионов вставок.Я понимаю, что вполне может быть несколько повторяющихся предложений, но проверил это и нашел более 21 миллиона уникальных предложений.Мой код Python работал нормально, без ошибок, и я проверил логи эластичного поиска и не нашел там ничего тревожного.Я немного не уверен насчет количества документов, удаленных из индекса (276.551, см. Выше), но я понял, что это может быть связано с переиндексацией, дублированием и не обязательно должно быть проблемой (и в любом случаеВ этом случае общее количество документов и удаленных документов все еще намного ниже моего количества предложений).
Единственное, что я смог найти (приблизившись к моей проблеме), было это сообщение: asticsearch через некоторое время прекращает индексировать новые документы, используя Tire , но следующий запрос:
curl -XGET 'localhost:9200/_nodes/stats/process?filter_path=**.max_file_descriptors'
возвращает:
{"nodes":{"hoOAMZoCTkOgirg6_aIkUQ":{"process":{"max_file_descr^Ctors":65536}}}}
, поэтому, как я понял после установки, по умолчанию установлено максимальное значение, и это не должно быть проблемой.
Любой, кто может пролить свет наэто?
ОБНОВЛЕНИЕ: Хорошо, я думаю, что я официально глупый.Моя проблема заключалась в том, что я использовал в качестве идентификатора индекса в качестве идентификатора в процессе добавления / вставки идентификатор.Это предложение_представляется из одного конкретного документа, поэтому максимальное количество документов (предложений) в моем индексе будет самым высоким предложением (в самом длинном документе в моем наборе данных, по-видимому, 795502 предложения).Он просто переписывал все записи после каждого документа ... Извините, что потратил ваше время, если вы прочитали это.НЕ проблема эластичного поиска;ошибка в моем коде Python (за пределами отображаемой функции выше).