Как написать запрос solr для извлечения всех записей с числовым значением поля, которое меньше указанного?
Предположим, у нас есть набор mp3-плееров с именами и ценами.
Как написать правильный запрос solr для поиска всех товаров с определенным именем и с ценой менее 100 $?
q = "(name:(ipod) AND price???? 100.0)"
Ответ 1
Я не думаю, что анализатор запросов поддерживает оператор <. Вы должны определить RangeQuery явно. Затем вы можете прикрепить к нему запрос имени, используя BooleanQuery.
field: [* TO 100] находит все значения поля, меньшие или равные 100
Ответ 2
также обратите внимание, что по производительности вы должны использовать запрос фильтра для этого:
&q=name:ipod&fq=price:[* TO 100]
Ответ 3
Насколько мне известно, я не считаю, что Solr/Lucene поддерживает больше/меньше. Это можно сделать программно для таких вещей, как целые числа и даты (и в вашем случае - денежные значения, так как есть только два десятичных знака, о которых можно беспокоиться).
Например, изначально обработчики запросов Lucene и Solr поддерживают меньше или равно (<=):
?q=name:ipod AND price:[* to 99.99]
Это даст вам менее 100 долларов, которые вы ищете, если данные не содержат доли процента.
Для таких вещей, как даты и целые числа, или другие вещи, которые имеют заметно конечные различия, вы можете уменьшить (или в случае большего, чем приращение) значение, которое вы собираетесь использовать.
EDIT: проверьте документацию на версию 6.5 Solr. Он содержит эксклюзивную поддержку диапазона. Страница 272 справочного руководства объясняет.