Комментарии 22
Неделя эластика на хабре. Недавно опубликовал перевод статьи Elasticsearch как NoSQL база данных.
Я сам делаю проект percolator.io. Подробнее можно почитать в предыдущей статье.
Если есть вопросы по эластику, управлению конфигурацией сервера — буду рад помочь.
Использую rails, reactjs, postgresql, ansible, digitalocean.
Я сам делаю проект percolator.io. Подробнее можно почитать в предыдущей статье.
Если есть вопросы по эластику, управлению конфигурацией сервера — буду рад помочь.
Использую rails, reactjs, postgresql, ansible, digitalocean.
Вот у меня вопрос. Как в Эластике делается русская морфология? Возможно ли без перекомпиляции плагинов добавить новое слово в морф. словарь или как-то ещё его изменить?
Можно сделать мэппинг для нужного поля(анализатор из коробки без плагина):
{ «properties»: { "<имя поля>": {«type»: «string», «analyzer»:«russian»}}}
{ «properties»: { "<имя поля>": {«type»: «string», «analyzer»:«russian»}}}
Сорри, я в эластике (и в джаве) совсем нулевой, поэтому можно чуть подробнее?
Таким образом мы к полю подключаем русский анализатор, правильно? Он наверняка основывается на каком-то словаре. Словарь этот неполон (полных словарей не бывает). Предположим, у меня на сайте активно используется слово «кракозябра», которой в словаре нет, и я хочу, чтобы она правильно (со всеми словоформами) обрабатывалась Эластиком. Как это сделать? В сфинксе я правлю айспелловский словарь и переиндексирую базу. А как в Элестике?
По беглому изучению плагинов Эластика у меня сложилось впечатление, что словари в них вкомпилены намертво, и чтобы их изменить, надо всё пересобирать. Это не так (надеюсь)?
Таким образом мы к полю подключаем русский анализатор, правильно? Он наверняка основывается на каком-то словаре. Словарь этот неполон (полных словарей не бывает). Предположим, у меня на сайте активно используется слово «кракозябра», которой в словаре нет, и я хочу, чтобы она правильно (со всеми словоформами) обрабатывалась Эластиком. Как это сделать? В сфинксе я правлю айспелловский словарь и переиндексирую базу. А как в Элестике?
По беглому изучению плагинов Эластика у меня сложилось впечатление, что словари в них вкомпилены намертво, и чтобы их изменить, надо всё пересобирать. Это не так (надеюсь)?
спасибо большое… если не сложно, бросьте письмо на ceo@likeastore.com — с радостью пообщаюсь :)
Поправьте
java -version # с одним дефисом
Все это время я присматривался к специализированным поисковым хранилищам, как ElasticSearch, Solr или Shpinx.
Почему к примеру не Sphinx? Приведите какие-то доводы и аргументы. Или же в итоге так и не дошли руки?
Давно использую Sphinx во многих проектах. Часто возникает потребность в использовании весов для определенных полей, что очень нужно и полезно.
Одна из причин, это вот. А так, по эластику мне понравилась документация, HTTP API и Lucene основа.
В эластике есть куча возможностей: агрегационные функции, percolate api, много плагинов, легкое масштабирование. Насколько я помню, то сфинкс сам переодически забирает данные из базы. А в эластик нужно отсылать документы вручную, соответственно, они появляются в индексе практически сразу. Тут больше гибкости: денормализация, можно модифицировать данные на основном языке(языке проекта). Хотя и есть механизм river, о нем есть упоминание в статье.
Из плагинов полезные: морфология, определение языка.
Ответ потянет на отдельную статью. Хотя, думаю, можно найти сравнение elasticsearch, solr, sphinx, mongodb, postgresql…
Лично мне понравилась документация(я ее 2 месяца активно изучал), rest api, отличные возможности по аналитике.
Еще есть kibana — отличный помощник в аналитике. Советую посмотреть видео. Рашид в кепке великолепен)
Из плагинов полезные: морфология, определение языка.
Ответ потянет на отдельную статью. Хотя, думаю, можно найти сравнение elasticsearch, solr, sphinx, mongodb, postgresql…
Лично мне понравилась документация(я ее 2 месяца активно изучал), rest api, отличные возможности по аналитике.
Еще есть kibana — отличный помощник в аналитике. Советую посмотреть видео. Рашид в кепке великолепен)
Тут нечего сравнивать. Sphinx по сравнению с ElasticSearch — детская поделка, причем довольно глючная.
Перевел все свои проекты с sphinx на ElasticSearch. В одном проекте промежуточным этапом был Solr, но потом в итоге ElasticSearch.
Перевел все свои проекты с sphinx на ElasticSearch. В одном проекте промежуточным этапом был Solr, но потом в итоге ElasticSearch.
sudo apt-get install openjdk-6-jre
Вот это вы очень зря. Практика показала, то только sun-java-7 или как его там. У openjdk наблюдаются проблемы с переполнением памяти, как кучи, так и direct. GC может не справляться.
Вот это вы очень зря. Практика показала, то только sun-java-7 или как его там. У openjdk наблюдаются проблемы с переполнением памяти, как кучи, так и direct. GC может не справляться.
А не могли бы вы пояснить, что значит
каждый такой insert влечет за собой ре-калькуляцию полнотекстового индекса?
Это означает, что после вставки нового элемента, индекс меняется. Вот обновление\перестройка\рекалькуляция индекса необходима для того, что бы индекс был в актуальном состоянии.
Весь индекс, или только его часть, затрагивающая измененные данные? Просто момент принципиальные. Сфинск например, умеет индексировать только новые данные и делает это ооооочень быстро. Как с этим у ElasticSearch?
А, вы в целом понимаете что такое рекалькуляция индекса, я не верно понял Ваш вопрос. :) Детали по ElasticSearch я рассказать не могу. Подождем автора.
Цитата, которую вы выделили, относится к MongoDB… и ее абсолютно правильно прокоменнировал veitmen
Что касается, апдейта индекса в ElasticSearch — к сожалению, глубоких технических подробностей я не знаю (пока), но по поведению вижу, что все вставки в индекс очень быстрые и таких симптомов как MongoDB, Elastic явно не испытывает.
Что касается, апдейта индекса в ElasticSearch — к сожалению, глубоких технических подробностей я не знаю (пока), но по поведению вижу, что все вставки в индекс очень быстрые и таких симптомов как MongoDB, Elastic явно не испытывает.
del
Для автоматического обновления индекса можно использовать стандартный 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 * * *",
}
}'
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Переходим от MongoDB Full Text к ElasticSearch