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, - это как непрерывное упражнение. Нет ничего простого! Почему бы и нет, я думал, стремлением к простоте было в первой строке документации, которую я прочитал. Но не просите меня, найти это снова.
Метки: drupal
drupal.org/node/294568