drupal поиск: search, partial substring, fuzzysearch, apache solr search, sphinxsearch

Поиск в Drupal 7 реализован с возможностью расширения. Возможно добавление сторонних движков (apache solr, sphinxsearch), реализация собственных поисковых индексов. При помощи модулей реализованы не только поиск по слову (из коробки поиск работает по количеству совпадений слов в индексе), но и поиск с учётом морфологии (porterstemmer http://www.phpguru.org/static/PorterStemmer.html , fuzzy search).

Поиск в Drupal (Drupal 7)

N-gram search - поиск по N-граммам (последовательность из N-символов). К примеру, поиск по триадам. Модуль fuzzysearch . Поиск удобен тем, что позволяет находить варианты по подстроке… Однако, при поиске конкретных моделей он не очень удобен, т.к. поиск производится с учётом смежных слов.

Интеграция fuzzysearch с views: https://drupal.org/node/177368

Для  Lucene Search, ранее существовали плагин https://drupal.org/project/luceneapi и дополнение к нему http://drupal.org/project/luceneapi_dym (DidYouMean). Однако, плагин устарел и не рекомендуется к использованию. Вместо него можно использовать встроенный поиск (модуль search) совместно с Faceted Navigation for Search или  Zend Lucene совместно с Search API.

Модуль поиска Apache Solr  https://drupal.org/project/ApacheSolr в сочетании с “фасетным поиском” - очень мощный инструмент. Модуль автодополнение поиска http://drupal.org/project/apachesolr_autocomplete)
UPD объёмный туториал в нескольких частях http://habrahabr.ru/post/175527/

Drupal + Sphinx

Для интеграции поискового движка Sphinx (установка Sphinx возможна на VPS или на выделенный сервер,  обычный хостинг не подходит) и Drupal модуль https://drupal.org/project/sphinxsearch

Поиск в Drupal по подстроке LIKE %substring%

Однако, такая простая вещь, как Partial word search = поиск по подстроке (старый добрый MySQL Like %%).. в принципе не реализована. What you’re looking for is an N-Gram (http://en.wikipedia.org/wiki/N-gram) based search solution

https://drupal.org/project/search_api
https://drupal.org/project/search_api_string_filter

Ещё с 2006 года хранится история создания различного рода патчей

Wildcard matching destroys the efficiency of the search index.

Но что делать, если нужен именно такой поиск? Пусть даже и в ущерб эффективности.

https://drupal.org/node/103548
Большое обсуждение на официальном сайте

Патч для search_api
https://drupal.org/node/1299238
https://drupal.org/files/1299238-search_api_db-partial-fulltext-search.patch

Из простого - удалось найти “грязные хаки” для модуля search, которые при следующем обновлении “вылетят”
https://drupal.org/files/search-partial_words_hack-498752-19.patch
https://drupal.org/node/1105954#comment-4631380

В дополнение к указанным, потребовался отдельный грязный хак для модуля views, т.к. он при отображении результатов поиска по %подстроке% в “красивой” вьюшке игнорировал все изменения в модуле search. Оно и понятно, т.к. при поиске с помощью views используются файлы из каталога sites/all/modules/views/modules/search/

В файлах, расположенных в этом каталоге:

views_handler_filter_search.inc
views_handler_argument_search.inc

Заменяем строчку
$or->condition("$search_index.word", $word);
на
$or->condition("$search_index.word", "%$or%", 'LIKE');//$or->condition("$search_index.word", $word);

Есть шанс, что в Drupal 8 возможность поиска по подстроке будет включена “из коробки”

Вариант поиска по подстроке через Exposed Filter по полю (node.title LIKE %substring%) не совсем подошёл, т.к. активно использовались возможности модуля fields.

Напоследок.. про Drupal - пока искал…

I must say, working with Drupal is like a continuous compile/build exercise. Nothing is simple! Why not, I thought the desire for simplicity was in the first line of the documentation I read, but don’t ask me to find it again

Скажу так: работа с Drupal, - это как непрерывное упражнение. Нет ничего простого! Почему бы и нет, я думал, стремлением к простоте было в первой строке документации, которую я прочитал. Но не просите меня, найти это снова.

Метки:

Автор будет признателен, если Вы поделитесь ссылкой на статью, которая Вам помогла:
BB-код (для вставки на форум)

html-код (для вставки в ЖЖ, WP, blogger и на страницы сайта)

ссылка (для отправки по почте)

1 комментарий к записи “drupal поиск: search, partial substring, fuzzysearch, apache solr search, sphinxsearch”

  1. levik сообщает :

    drupal.org/node/294568

Добавить комментарий