Drupal → Search API и поиск с морфологией

08.10.2013

Пошаговая инструкция настройки Search API для поиска с морфологией.

Кто пользуется встроенным в друпал модулем поиска и по каким то причинам не хочет использовать Search API, тому достаточно включить модуль Russian stemming (для Drupal 7) или Snowball Stemmer (для Drupal 9+) и сделать переиндексацию индекса на странице admin/config/search/settings. После этого поиск с морфологией заработает без дополнительной настройки.

Настройка Search API

  1. Отключаем модуль Search.

  2. Включаем модули Search API, Database search и RussianStemmer.

  3. На странице admin/config/search/search_api добавляем новый сервер с классом Database service:

  4. На странице admin/config/search/search_api переходим в настройки дефолтного индекса:

  5. Изменяем сервер на созданный ранее и сохраняем изменения:

  6. На странице admin/config/search/search_api включаем дефолтный индекс:

  7. На странице admin/config/search/search_api переходим в настройки Workflow у дефолтного индекса:

  8. В блоке Processors включаем Russian stemmer:

  9. На этой же странице изменяем порядок процессоров так, чтобы Russian stemmer оказался последним и сохраняем изменения:

  10. На странице admin/config/search/search_api переходим по ссылке Status дефолтного индекса:

  11. Запускаем индексирование с помощью кнопки Index now:

  12. После окончания индексирования проверяем таблицу search_api_db_default_node_index_body_value. В ней должны быть слова без окончаний:

Настройка Views

  1. Включаем модуль Search views из состава Search API.

  2. Создаём страницу представления по дефолтному индексу и с выводом Rendered entity:

  3. Добавляем раскрытый фильтр Search: Fulltext search

  4. В настройках фильтра выбираем оператор Contains any of these words, а в поле Searched fields все поля из индекса, по которым будет происходить поиск:

  5. Проверяем результат:

Подробнее про Search API:

Поиск на Drupal 7 с помощью Apache Solr
Search API. Работа с Apache Solr
Доклад о Search API на DrupalCon Prague 2013

Написанное актуально для
Drupal 7
Похожие записи

Комментарии

для больше наглядности результата(пункт 5) я бы добавил в процессоры highlighting ,а в сам текст несколько словоформ

Гость
10.10.2013, 12:17

И база данных сразу не хило так разжиреет... в зависимости от количества уже имеющегося контента.

не больше чем от стандартного модуля Search

Раз уж речь зашла о Search API и Search Views, не могу не спросить, может сталкивались: как на странице результатов поиска выводить запрос (в заголовок, например)?

Пробовал играться с contextual filters - не работает.

xandeadx задача организовать как можно более ролевыантный поиск

Сергей
02.12.2014, 09:22

Вы написали: "Кто пользуется встроенным в друпал модулем поиска и по каким то причинам не хочет использовать Search API..."
А надо ли использовать модуль Search API если можно и со стандартным поиском искать с морфологией? Т.е. что дает использование Search API по сравнению со стандартным?

Сергей
02.12.2014, 15:52

Читал про возможности Search API (но не пользовался), меня интересовало именно качество поиска с морфологией - есть ли разница.

Подсветка только в поиске по слову работает :(
Тогда смысла вообще нет в сиём творении если по части слова подсветить нужно результат. Ну или руками или JS-ом...

Гость
07.05.2015, 15:17

Все поставил, все настроил, все круто работает, но после отключения search пропадает блок с формой поиска, который выводился на всех страницах сайта и после введения слов в который собственно на страницу поиска и попадали раньше.

Не соображу как вернуть поле формы поиска на все страницы сайта при использовании Search API?

вынесите раскрытый фильтр в блок

Гость
08.11.2016, 15:08

Спасибо за статью. Подскажите а как быть если я подключаю модуль search api autocomplete. У меня подтягиваются результаты - автокомплит работает. Проблема возникает если я фильтрую по терминам - дополнительно к поиску. Как сделать чтоб в автокомплит попадали только данные, ноды которых связаны с выбранным термином. То есть что то наподобии фасетного поиска.

Александр
22.11.2016, 05:09

Спасибо за статью, в который раз к ней возвращаюсь.
Но тут возникла маленькая проблема:
поиск тупо игнорирует цифру "0". Если вводить 100 - находит значения в которых есть 100, если 001 - ищет только 1.. Просто ввести 0 - все остается на месте. Через фильтр по заголовкам такой проблемы нет, если заголовки брать из индекса ноль не ищет. Грешу на токенайзер, может где пробельные символы что ввести? Подскажите пожалуйста, уже всю голову сломал...

Александр
22.11.2016, 13:54

Хотя если токенайзер отключить ничего не меняется..

Спасибо за статью! Сэкономил кучу времени :)

Гость
31.01.2017, 09:48

Александр, может быть дело в настройке минимальной длины поискового слова? На первом скриншоте последний select

Гость
21.02.2017, 12:10

Поддерживаю вопрос в комменте выше - Как сделать чтоб в автокомплит попадали только данные, ноды которых связаны с выбранным термином.

Дмитрий
25.05.2017, 15:26

Привет! Есть проблема с этим модулем. Интересно, что если в заголовках многих статей на сайте имеются словосочетания написанные через дефис (например "контрольно-измерительные"), и в форму поиска ввести такое сочетание, то поиск не дает результатов вообще. Даже если вводить это сочетание без дефиса, результатов нет. Но стоит в настройка установить галочку Search on parts of a word, то искомый запрос находится, однако поиск очень медленный. Кажется, что этот модуль по каким-то причинам причинам не воспринимает такие словосочетания и не индексирует их. Пожалуйста, ответьте, сталкивались ли Вы с такой проблемой? Или можете дать совет? Благодарю Вас!

смотрите что в индексе, и какая фраза уходит при поиске

Дмитрий
25.05.2017, 15:56

/new-search?query=Контрольно-измерительные%20материалы - вот что уходит при поиске
контрольнизмерительн материал -Это в индексе

Ума не приложу, как разделить при индексировании "контрольнизмерительн"???

смотрите что уходит в запросе к базе, а не в адресе

Дмитрий
25.05.2017, 15:59

Странно, но даже по запросу "контрольнизмерительн материал" - результат нулевой...

Дмитрий
25.05.2017, 16:08

Извините, как и где я могу это посмотреть?

Тимофей
22.06.2017, 09:24

Спасибо за статью.

А есть ли способ настроить поиск по части слова? Что-то я перерыл много материала по Search API c SOLR и без него, но так и не нашел решения ни в рунете ни за ним.

Например у меня пустой результат, если искать "welcom", а если дописать "welcome" - то сразу все хорошо. Как же быть? Спасибо.

Тимофей
22.06.2017, 09:30

К предыдущему комментарию забыл дописать, что интересует именно поиск по произвольной части слова. Не морфологический поиск (по однокоренным), который настраивается по словарям или с помощью Stemmer.

Предыдущий припер с welcome - именно об этом, и кроме того всякие аббревиатуры и сокращения тоже не подпадают под морфологию, а искать их приходится.

В настройках сервера есть опция "Search on parts of a word"

Александр
27.07.2017, 17:31

Гость, скорее всего нет..
Перепробовал разные варианты но поиск так и продолжает игнорировать 0 вначале строки, и по запросу 000 выдает пустое значение.
На форуме посоветовали смотреть search API -> API + hook's, пока не разобрался...

Михаил
11.05.2018, 09:08

Установил, настроил. Автору большое спасибо!

Собственно теперь вопрос по транслитерации. Если ввожу часть слова на английском, на пример, asp - это артикул товара, то получаю кучу страниц с русским вхождением в состав слова букв "асп" аспираторный, на пример. Если отключить транслитерацию поиск перестает работать. При чем вхождение именно asp в состав слова выдает на 10 месте. Наверное как-то нужно настраивать релевантность выдачи. Можно ли это как-то победить, или я в настройках накосячил.

Гость
13.05.2019, 18:47

Зачен интересно отключать module Search? У меня и так все отлично работает

Чтобы не потреблял ресурсы сервера

@Дмитрий есть - drupal.org/project/snowball_stemmer

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