[решено] Search API + фильтры

Аватар пользователя shevgeny shevgeny 18 октября 2015 в 13:26

Есть настроенный поиск по сайту на базе Search API через Apache Solr Search. Всё работает, но возник вопрос с совершенствованием поисковой выдачи.

К примеру, в материале есть фраза «ремонт квартир в москве». Она участвует в индексации и по этому запросу материал вполне успешно индексируется. Однако, мы можем ввести просто «квартиры в москве» и тут этот же материал тоже будет в результатах поиска, но это не правильно, он нерелевантен с точки зрения логики.

Поэтому возник вопрос, а можно ли как-то исключить определенные материалы из поисковой выдачи по определенным поисковым запросам? Мне приходит в голову что-то вроде добавления поля в тип материала со списком запросов-исключений. Вопрос в том, как по этому полю отфильтровать результаты? То есть если в поле материала «запросы-исключения» есть «квартиры в москве», то по этому запросу материал не показывать.

Буду очень благодарен за любые конструктивные мысли и предложения :)

РЕШЕНИЕ:
В моем случае, все варианты, описанные в комментариях — не подходят. Возможно кому-то тоже пригодится. Как писал выше, мне нужно было создать какое-то условное поле в типе материала, в котором я буду писать запросы-исключения, из поиска по которым этот материал будет исключен.
1. Создаю такое поле
2. В материале прописываю значения
3. В настройках индекса включаю поиск по этому полю
4. В настройках раскрытого фильтра view исключаю поиск по этому полю
5. В контекстных фильтрах view добавляю это поле и настраиваю следующим образом:
- Предоставить аргумент по умолчанию > PHP-код > <?phpif (!empty($_GET["query"])){ return $_GET["query"];}?>
- Ещё > Исключить (ставим галку)
И вуаля! :)

0 Thanks

Комментарии

Аватар пользователя shevgeny shevgeny 18 октября 2015 в 14:26
Lotar wrote:

Поставьте точное совпадение.

Не поможет, пробовал. В примере, который я описал (просмотрите ещё разок), видно, что точное совпадение не поможет.

Аватар пользователя multpix multpix 18 октября 2015 в 15:03
"shevgeny" wrote:

К примеру, в материале есть фраза «ремонт квартир в москве». Она участвует в индексации и по этому запросу материал вполне успешно индексируется. Однако, мы можем ввести просто «квартиры в москве» и тут этот же материал тоже будет в результатах поиска, но это не правильно, он нерелевантен с точки зрения логики.

Структурируйте материалы.
Грубо говоря: «ремонт квартир в москве» и «квартиры в москве» должны быть классифицированы тегами "ремонт" и "аренда" соответственно.

Аватар пользователя shevgeny shevgeny 18 октября 2015 в 15:16
multpix wrote:

Структурируйте материалы.
Грубо говоря: «ремонт квартир в москве» и «квартиры в москве» должны быть классифицированы тегами "ремонт" и "аренда" соответственно.

Теги имеются, поиск по ним тоже включён, но я говорю непосредственно о поисковой выдаче и обработке запросов. Пока не понимаю, как ваше предложение поможет в описанной ситуации.

Аватар пользователя multpix multpix 18 октября 2015 в 15:34
"shevgeny" wrote:

Теги имеются

а фасеты на основе этих тегов помогут пользователю уточнить выборку.

Аватар пользователя shevgeny shevgeny 18 октября 2015 в 15:41
multpix wrote:
"shevgeny" wrote:

Теги имеются

а фасеты на основе этих тегов помогут пользователю уточнить выборку.

Фасеты — да, но я, ведь, не о них говорю. О фасетах думал, но для моих целей они, увы, не подойдут. Нужно именно какое-то исключение из выдачи некоторых материалов по определенным запросам. Ситуация, конечно, очень частная, но мне думается, что есть варианты, просто пока никак не соображу направление движения))

Аватар пользователя goodboy goodboy 18 октября 2015 в 16:18

Напишите свой процессор для Search API. Наиболее близкий, на мой взгляд, это stopwords ( /sites/all/modules/search_api/includes/processor_stopwords.inc )

Аватар пользователя shevgeny shevgeny 19 октября 2015 в 9:13
Goodboy wrote:

Напишите свой процессор для Search API. Наиболее близкий, на мой взгляд, это stopwords ( /sites/all/modules/search_api/includes/processor_stopwords.inc )

ага… спасибо, не совсем то, что я ищу, но, возможно, поможет. Буду пробовать.