Pull to refresh

Comments 22

Неделя эластика на хабре. Недавно опубликовал перевод статьи Elasticsearch как NoSQL база данных.

Я сам делаю проект percolator.io. Подробнее можно почитать в предыдущей статье.

Если есть вопросы по эластику, управлению конфигурацией сервера — буду рад помочь.
Использую rails, reactjs, postgresql, ansible, digitalocean.
Вот у меня вопрос. Как в Эластике делается русская морфология? Возможно ли без перекомпиляции плагинов добавить новое слово в морф. словарь или как-то ещё его изменить?
Русская морфология делается с помощью плагина. Я не нашел в документации ничего про добавление словарей для этого плагина. Возможно, твою задачу можно решить другом способом. Посмотри как работает analysis. Там очень много возможностей по обработке текста.
Можно сделать мэппинг для нужного поля(анализатор из коробки без плагина):
{ «properties»: { "<имя поля>": {«type»: «string», «analyzer»:«russian»}}}
Сорри, я в эластике (и в джаве) совсем нулевой, поэтому можно чуть подробнее?

Таким образом мы к полю подключаем русский анализатор, правильно? Он наверняка основывается на каком-то словаре. Словарь этот неполон (полных словарей не бывает). Предположим, у меня на сайте активно используется слово «кракозябра», которой в словаре нет, и я хочу, чтобы она правильно (со всеми словоформами) обрабатывалась Эластиком. Как это сделать? В сфинксе я правлю айспелловский словарь и переиндексирую базу. А как в Элестике?

По беглому изучению плагинов Эластика у меня сложилось впечатление, что словари в них вкомпилены намертво, и чтобы их изменить, надо всё пересобирать. Это не так (надеюсь)?
К сожалению я не профи пока в ES. Мне нужно было подключить русскую морфологию, это способ ее подключения. Насчет словарей — затрудняюсь сказать. Задача была простой — чтобы адекватный поиск был, а не так что «наука» и «науки» разные слова.
О, большое спасибо. Именно то, что нужно.
спасибо большое… если не сложно, бросьте письмо на ceo@likeastore.com — с радостью пообщаюсь :)
Все это время я присматривался к специализированным поисковым хранилищам, как ElasticSearch, Solr или Shpinx.

Почему к примеру не Sphinx? Приведите какие-то доводы и аргументы. Или же в итоге так и не дошли руки?
Давно использую Sphinx во многих проектах. Часто возникает потребность в использовании весов для определенных полей, что очень нужно и полезно.
Одна из причин, это вот. А так, по эластику мне понравилась документация, HTTP API и Lucene основа.
В эластике есть куча возможностей: агрегационные функции, percolate api, много плагинов, легкое масштабирование. Насколько я помню, то сфинкс сам переодически забирает данные из базы. А в эластик нужно отсылать документы вручную, соответственно, они появляются в индексе практически сразу. Тут больше гибкости: денормализация, можно модифицировать данные на основном языке(языке проекта). Хотя и есть механизм river, о нем есть упоминание в статье.

Из плагинов полезные: морфология, определение языка.

Ответ потянет на отдельную статью. Хотя, думаю, можно найти сравнение elasticsearch, solr, sphinx, mongodb, postgresql…

Лично мне понравилась документация(я ее 2 месяца активно изучал), rest api, отличные возможности по аналитике.

Еще есть kibana — отличный помощник в аналитике. Советую посмотреть видео. Рашид в кепке великолепен)
Тут нечего сравнивать. Sphinx по сравнению с ElasticSearch — детская поделка, причем довольно глючная.
Перевел все свои проекты с sphinx на ElasticSearch. В одном проекте промежуточным этапом был Solr, но потом в итоге ElasticSearch.
sudo apt-get install openjdk-6-jre

Вот это вы очень зря. Практика показала, то только sun-java-7 или как его там. У openjdk наблюдаются проблемы с переполнением памяти, как кучи, так и direct. GC может не справляться.
А не могли бы вы пояснить, что значит
каждый такой insert влечет за собой ре-калькуляцию полнотекстового индекса
?
Это означает, что после вставки нового элемента, индекс меняется. Вот обновление\перестройка\рекалькуляция индекса необходима для того, что бы индекс был в актуальном состоянии.
Весь индекс, или только его часть, затрагивающая измененные данные? Просто момент принципиальные. Сфинск например, умеет индексировать только новые данные и делает это ооооочень быстро. Как с этим у ElasticSearch?
А, вы в целом понимаете что такое рекалькуляция индекса, я не верно понял Ваш вопрос. :) Детали по ElasticSearch я рассказать не могу. Подождем автора.
Цитата, которую вы выделили, относится к MongoDB… и ее абсолютно правильно прокоменнировал veitmen

Что касается, апдейта индекса в ElasticSearch — к сожалению, глубоких технических подробностей я не знаю (пока), но по поведению вижу, что все вставки в индекс очень быстрые и таких симптомов как MongoDB, Elastic явно не испытывает.
Для автоматического обновления индекса можно использовать стандартный river с подключенным JDBC драйвером для MongoDB. Обновление по расписанию.
Например:
curl -XPUT 'localhost:9200/_river/my_jdbc_river/_meta' -d '{
    "type": "jdbc",
    "jdbc": {
        "strategy": "simple",
        "versioning" : true,
        "autocommit" : true,
        "schedule": " * * 0/1 * * *",
    }
}'
Sign up to leave a comment.