Пошаговая инструкция настройки Search API для поиска с морфологией.
Кто пользуется встроенным в друпал модулем поиска и по каким то причинам не хочет использовать Search API, тому достаточно включить модуль Russian stemming (для Drupal 7) или Snowball Stemmer (для Drupal 9+) и сделать переиндексацию индекса на странице admin/config/search/settings
. После этого поиск с морфологией заработает без дополнительной настройки.
Настройка Search API
-
Отключаем модуль Search.
-
Включаем модули Search API, Database search и RussianStemmer.
-
На странице
admin/config/search/search_api
добавляем новый сервер с классом Database service: -
На странице
admin/config/search/search_api
переходим в настройки дефолтного индекса: -
Изменяем сервер на созданный ранее и сохраняем изменения:
-
На странице
admin/config/search/search_api
включаем дефолтный индекс: -
На странице
admin/config/search/search_api
переходим в настройки Workflow у дефолтного индекса: -
В блоке Processors включаем Russian stemmer:
-
На этой же странице изменяем порядок процессоров так, чтобы Russian stemmer оказался последним и сохраняем изменения:
-
На странице
admin/config/search/search_api
переходим по ссылке Status дефолтного индекса: -
Запускаем индексирование с помощью кнопки Index now:
-
После окончания индексирования проверяем таблицу
search_api_db_default_node_index_body_value
. В ней должны быть слова без окончаний:
Настройка Views
-
Включаем модуль Search views из состава Search API.
-
Создаём страницу представления по дефолтному индексу и с выводом Rendered entity:
-
Добавляем раскрытый фильтр Search: Fulltext search
-
В настройках фильтра выбираем оператор Contains any of these words, а в поле Searched fields все поля из индекса, по которым будет происходить поиск:
-
Проверяем результат:
Подробнее про Search API:
— Поиск на Drupal 7 с помощью Apache Solr
— Search API. Работа с Apache Solr
— Доклад о Search API на DrupalCon Prague 2013
- Создание фасетной навигации с помощью Search API
- Программно получить результаты запроса Search API
- Модуль Views field replace value — замена значений полей в Views
- Модуль Geofield Yandex Maps — ввод и вывод гео-информации на Яндекс.Картах 2.1
- Модуль Google Analytics Statistics — вывод популярных материалов с помощью Views на основе данных Google Analytics
Комментарии
https://drupal.org/project/fuzzysearch тоже неплох
для больше наглядности результата(пункт 5) я бы добавил в процессоры highlighting ,а в сам текст несколько словоформ
И база данных сразу не хило так разжиреет... в зависимости от количества уже имеющегося контента.
не больше чем от стандартного модуля Search
Раз уж речь зашла о Search API и Search Views, не могу не спросить, может сталкивались: как на странице результатов поиска выводить запрос (в заголовок, например)?
Пробовал играться с contextual filters - не работает.
drupal_set_title(запрос);
xandeadx А Sphinx будет не лучше?
зависит от задачи
xandeadx задача организовать как можно более ролевыантный поиск
Вы написали: "Кто пользуется встроенным в друпал модулем поиска и по каким то причинам не хочет использовать Search API..."
А надо ли использовать модуль Search API если можно и со стандартным поиском искать с морфологией? Т.е. что дает использование Search API по сравнению со стандартным?
почитайте описание Search API
Читал про возможности Search API (но не пользовался), меня интересовало именно качество поиска с морфологией - есть ли разница.
разницы нет, принцип один
Подсветка только в поиске по слову работает :(
Тогда смысла вообще нет в сиём творении если по части слова подсветить нужно результат. Ну или руками или JS-ом...
Все поставил, все настроил, все круто работает, но после отключения search пропадает блок с формой поиска, который выводился на всех страницах сайта и после введения слов в который собственно на страницу поиска и попадали раньше.
Не соображу как вернуть поле формы поиска на все страницы сайта при использовании Search API?
вынесите раскрытый фильтр в блок
Спасибо за статью. Подскажите а как быть если я подключаю модуль search api autocomplete. У меня подтягиваются результаты - автокомплит работает. Проблема возникает если я фильтрую по терминам - дополнительно к поиску. Как сделать чтоб в автокомплит попадали только данные, ноды которых связаны с выбранным термином. То есть что то наподобии фасетного поиска.
Спасибо за статью, в который раз к ней возвращаюсь.
Но тут возникла маленькая проблема:
поиск тупо игнорирует цифру "0". Если вводить 100 - находит значения в которых есть 100, если 001 - ищет только 1.. Просто ввести 0 - все остается на месте. Через фильтр по заголовкам такой проблемы нет, если заголовки брать из индекса ноль не ищет. Грешу на токенайзер, может где пробельные символы что ввести? Подскажите пожалуйста, уже всю голову сломал...
Хотя если токенайзер отключить ничего не меняется..
Спасибо за статью! Сэкономил кучу времени :)
Александр, может быть дело в настройке минимальной длины поискового слова? На первом скриншоте последний select
Поддерживаю вопрос в комменте выше - Как сделать чтоб в автокомплит попадали только данные, ноды которых связаны с выбранным термином.
Похоже, что для D8 затык именно в RussianStemmer, т.к. Database search стал частью search_api. Я так понял, RussianStemmer – это переделанный porterstemmer под русский сноубол Портера.
Привет! Есть проблема с этим модулем. Интересно, что если в заголовках многих статей на сайте имеются словосочетания написанные через дефис (например "контрольно-измерительные"), и в форму поиска ввести такое сочетание, то поиск не дает результатов вообще. Даже если вводить это сочетание без дефиса, результатов нет. Но стоит в настройка установить галочку Search on parts of a word, то искомый запрос находится, однако поиск очень медленный. Кажется, что этот модуль по каким-то причинам причинам не воспринимает такие словосочетания и не индексирует их. Пожалуйста, ответьте, сталкивались ли Вы с такой проблемой? Или можете дать совет? Благодарю Вас!
смотрите что в индексе, и какая фраза уходит при поиске
/new-search?query=Контрольно-измерительные%20материалы - вот что уходит при поиске
контрольнизмерительн материал -Это в индексе
Ума не приложу, как разделить при индексировании "контрольнизмерительн"???
смотрите что уходит в запросе к базе, а не в адресе
Странно, но даже по запросу "контрольнизмерительн материал" - результат нулевой...
Извините, как и где я могу это посмотреть?
google -> drupal how to view database queries -> https://drupal.stackexchange.com/a/75630/1823
спасибо... тему не закрываю
С помощью Devel?
Спасибо за статью.
А есть ли способ настроить поиск по части слова? Что-то я перерыл много материала по Search API c SOLR и без него, но так и не нашел решения ни в рунете ни за ним.
Например у меня пустой результат, если искать "welcom", а если дописать "welcome" - то сразу все хорошо. Как же быть? Спасибо.
К предыдущему комментарию забыл дописать, что интересует именно поиск по произвольной части слова. Не морфологический поиск (по однокоренным), который настраивается по словарям или с помощью Stemmer.
Предыдущий припер с welcome - именно об этом, и кроме того всякие аббревиатуры и сокращения тоже не подпадают под морфологию, а искать их приходится.
В настройках сервера есть опция "Search on parts of a word"
Гость, скорее всего нет..
Перепробовал разные варианты но поиск так и продолжает игнорировать 0 вначале строки, и по запросу 000 выдает пустое значение.
На форуме посоветовали смотреть search API -> API + hook's, пока не разобрался...
Установил, настроил. Автору большое спасибо!
Собственно теперь вопрос по транслитерации. Если ввожу часть слова на английском, на пример, asp - это артикул товара, то получаю кучу страниц с русским вхождением в состав слова букв "асп" аспираторный, на пример. Если отключить транслитерацию поиск перестает работать. При чем вхождение именно asp в состав слова выдает на 10 месте. Наверное как-то нужно настраивать релевантность выдачи. Можно ли это как-то победить, или я в настройках накосячил.
Зачен интересно отключать module Search? У меня и так все отлично работает
Чтобы не потреблял ресурсы сервера
жаль нет для drupal 10
@Дмитрий есть - drupal.org/project/snowball_stemmer
Добавить комментарий