2013-07-25 3 views
0

Я использую ElasticSearch для индексации некоторых данных. Но я обнаружил, что производительность - это не эффективность.Улучшение производительности ElasticSearch

Имеется только 3000 записей данных, и каждая информация имеет 6 столбцов. Это стоит 5 минут для индексации этих 3000 записей.

Потому что я новичок с ElasticSearch, мой код и поток программы являются основными следующим образом:

  1. поиск и проверка есть ли те же данные с ним.
  2. если есть такие же данные, а затем обновить.
  3. Если нет, то добавьте.

Код следующее:

conn = pyes.ES('server:9200') 

Поиск:

searchResult = conn.search(searchDict, indexName, TypeName) 

Index

conn.index(storeDict, indexName, TypeName, id) 

Обновление граф в индексных данных.

conn.partial_update(indexName, TypeName, id, "ctx._source.Count += counter", params={"counter" : 1}) 

Есть ли какой-либо метод, который может улучшить производительность моего кода?

Благодарим за помощь.

+1

Не могли бы вы сделать заголовок вопроса немного более наглядным. Похоже, что вы улучшаете способы использования elasticsearch в своем приложении, а не улучшаете свою собственную производительность. – javanna

ответ

1

Вам не нужно искать перед обновлением. Read the es docs on updating и прокрутите вниз до раздела upsert. upsert - это параметр, который содержит документ для использования , если документ не существует на сервере, в противном случае upsert игнорируется и работает как обычный запрос update (как вы это делаете сейчас).

Удачи вам!

+0

HI, Это я снова. Я пересмотрел свой код с помощью upsert, и это лучше. Это займет 3 минуты. Есть ли способ дать время меньше 1 минуты? –

+0

Я изменяю конфигурационный файл в /bin/elasticsearch.in.sh, бит, кажется, не работает, даже я перезапускаю поиск elasticsearch. Как я могу позволить elasticsearch читать новый файл настроек? –

+0

Я не очень уверен в файлах настроек, извините. Если вы хотите, чтобы индексное время было еще ниже, не используйте сценарий обновления.То, что я бы экспериментировал (если вы увеличиваете одно поле в обновлении), это вычислить результат модификации, создать новый документ в pyres, а затем просто перезаписать старый документ. (Используйте обычный put api, как вы это делаете на шаге 3 вашего вопроса.) – ramseykhalaf

1
  • Вы можете использовать versioning feature поиска elastics. Если вы решите, что ваши документы достаточно легки. Он просто переиндексирует данные.

  • Вы должны использовать BULK API для индексации. (1000-5000 хорошо)

  • Другой причиной плохой производительности о параметрах конфигурации на config/elasticsearch.yml, вы можете использовать это hints для повышения производительности индексирования.