Статьи

Solr 1.4: Локальные параметры


Несколько месяцев назад во время одного из проектов я пытался построить запрос с оптимальной огранкой.
Проблема заключалась в том, что нам нужны фильтры (
fq ) в запросе, но в то же время нам нужна грань, которая не была отфильтрована. В какой-то момент это было невозможно в Solr — нужно было сделать два запроса. Но теперь вы можете сделать это одним запросом. Давайте встретимся с
LocalParams .

Начало

LocalParams позволяет пометить часть запроса, например:

q=*:*&fq={!tag=city}city:warszawa

После отправки вышеуказанного запроса в Solr он запомнит (в контексте того же запроса), что тег с именем city покрывает фильтр значением city: warszawa . Теперь предположим, что мы хотим отправить запрос, чтобы получить все документы, которые имеют значение warszawa в поле города (предположим, что поле города многозначно). Кроме того, мы хотим, чтобы Solr показал нам количество документов во всех городах. Ничто не может быть проще с использованием LocalParams — просто используйте параметр {! Ex} в огранке. Это можно сделать, отправив следующий запрос в Solr:

1	q=*:*&fq={!tag=miasto}city:warszawa&facet=true&facet.field={!ex=miasto}city

 

Приведенный выше запрос вернет документы, имеющие значение warszawa в поле города и фасет, рассчитанный для поля города, которое не ограничено запросом фильтра, поскольку мы исключили этот фильтр.

Тип парсера запросов

Конечно, использование LocalParams не ограничивается огранкой. Одним из интересных примеров является определение обработчика типа. Если мы используем стандартный анализатор запросов, мы можем изменить его тип для конкретного запроса с этой структурой:

	q={!type=dismax qf=city}warszawa

 

Приведенный выше запрос будет использовать синтаксический анализатор запросов dismax и передаст ему параметр qf = city вместе со значением warszawa в параметре q .

Логический оператор

Изменить логический оператор по умолчанию с помощью LocalParams также очень просто:

	q={!q.op=AND}warszawa praga

Вышеупомянутый запрос использует логический оператор AND для терминов, содержащихся в параметре q , которые являются warszawa и praga .

Разыменование параметра

Кроме того, используя LocalParams, мы можем получить интересную функцию — разыменование параметров. Например, если мы хотим использовать ваши собственные имена параметров в запросах, мы можем сделать это следующим образом:

Solr не поддерживает по умолчанию параметр с именем pmiasto , но с ключом V (то есть значение) и использование ссылки оператора $ можно было передать значение такого имени параметра запроса.

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

Дополнительная информация

Актуальную информацию о LocalParams и Solr можно найти в вики Apache Solr по следующему адресу: http://wiki.apache.org/solr/LocalParams .