Я большой
поклонник Solr . Как только вы поймете, что он делает (это поисковая система, а это значит больше, чем вы думаете) и как она работает, вы обнаруживаете множество непростых проблем, которые очень хорошо отображают его функции. По моему опыту, он также очень быстрый и очень стабильный после установки и настройки. О, и поддержка сообщества также велика.
Когда я говорю с людьми о Solr, все, о чем они могут думать, — это полнотекстовый поиск. Я думаю, что главной причиной этого является ряд плохих библиотек. Я встречал много библиотек Python или Ruby, которые просто говорят, что вам не нужно ничего знать о Solr, просто установите этот код, и вы получите полнотекстовый поиск! Это работает так же, как и использование стандартных конфигураций Mysql или Apache, но не так близко, как если бы вы даже немного испачкали руки. Некоторые из рубиновых драгоценных камней даже отправляют файл драгоценного камня Solr в драгоценный камень. Теперь вам даже не нужно знать, что Solr существует. Вы берете универсальную конфигурацию и запускаете ее, используя задачу rake, за которой стоит какой-то неизвестный сервер приложений Java. Удачи в отладке, что когда все идет не так, это чертовски отвратительная абстракция.
Из хороших новостей я обнаружил две отличные библиотеки Solr, одна из которых начинается с предположения, что вы знаете, что делаете, или рады узнать об используемых вами инструментах. Все, что вам действительно нужно от библиотеки, — это хороший API, который соответствует тому, как вы пишете на этом языке.
Делсолр (Рубин)
Delsolr API красиво. Кажется, что он без труда объединяет миры Ruby и Solr так, что их легко написать и легко угадать. Это также разумно, дизайн допускает, что новые функции могут быть добавлены в Solr до обновления библиотеки или что библиотека может поддерживать не все варианты использования или опции. В этих случаях вы все равно можете напрямую передавать информацию в Solr.
Интерфейс Solr основан на URL, поэтому любая библиотека на самом деле просто дает вам интерфейс для создания этих URL.
rsp = solr.query('standard', :query => '*:*', :filters => {:status => 'Active'}, :facets => [{:field => 'project'}] ])
Результаты в следующем URL :
/select?q=*:*&wt=ruby&facet=true&facet.field=status&facet.field=name&fq=status:Active
Если вы уже знаете Solr и как создавать URL-адреса для поиска вручную, вы сразу же получите код Ruby. Вы можете даже догадаться, как передать другие параметры, такие как сортировка или порядок.
Еще одним приятным моментом является то, что для каждого атрибута вы можете использовать хеши или синтаксис поиска Lucene. Так:
:filters => {:status => 'Active'}
Такой же как:
:filters => 'status:Active'
Загорелый (питон)
Sunburnt — интерфейс Python Solr от хороших людей из Timetric . У меня не было возможности использовать эту библиотеку в гневе, так как она была выпущена после того, как я немного потрудился над Python-Solr на старой работе, но я определенно буду использовать ее сейчас. В API выглядит следующим образом :
rsp = solr.query('*:*').filter(status='Active').facet_by('project').execute()
Он основан на цепочке, поэтому вы, вероятно, сможете догадаться, как делать дальнейшие запросы даже из этого простого примера.
Sunburnt и Delsolr также поддерживают добавление документов в индекс.
Пользы
Как только вы поймете аспекты и полезность запросов фильтра, вы увидите множество мест, где Solr полезен помимо текстового поиска. Многие операции электронной коммерции используют граничные интерфейсы поиска, я уверен, что все потратили время, просматривая вложенные иерархии и наблюдая, как уменьшаются числа (показывающие количество товаров) рядом с ссылками? Вы можете создать эти интерфейсы, используя SQL, но это невероятно дорого и быстро выходит из-под контроля. Кэширование только немного помогает из-за количества перестановок во всех, кроме самых маленьких магазинах или самых простых продуктов. С тегами похожая проблема, убить базу данных довольно просто
Но не только вещи, в которых есть поиск слов, можно сопоставить с Solr. Два хороших примера — это Timetric (от которого взята библиотека Sunburnt) и Guardian Content API . Оба из них представляют большой объем данных для чтения прямо из Solr с большим успехом и меньшими проблемами производительности базы данных. Solr действительно можно рассматривать как простое место для денормализации ваших данных, одним из преимуществ которого является то, что он поддерживает схему вашей базы данных в чистоте.
Учиться больше
Solr мог бы сделать с лучшей документацией для начинающих. Вики является отличным справочником, если вы знаете, как писать файлы схемы и конфигурации, но я думаю, что раздел «Начало работы» приносит в жертву внедрение конфигурации в пользу более быстрого поиска людей. Примеры файлов схемы и solrconfig, которые поставляются с Solr, также являются удивительно полезными ссылками (официально лучшим XML- комментарием, который я когда-либо видел), но также пугают новичков. Сообщество Drupal, кажется, пишет несколько хороших документов, которые восполняют этот пробел, вот несколько ссылок, которые я бы порекомендовал: