Как написать запрос solr для извлечения всех записей с числовым значением поля, которое меньше указанного?
Предположим, у нас есть набор mp3-плееров с именами и ценами.
Как написать правильный запрос solr для поиска всех товаров с определенным именем и с ценой менее 100 $?
q = "(name:(ipod) AND price???? 100.0)"
Ответы
Ответ 1
Я не думаю, что анализатор запросов поддерживает оператор <
. Вы должны определить RangeQuery явно. Затем вы можете прикрепить к нему запрос имени, используя BooleanQuery.
Обновление: видимо, я был не прав. На самом деле, анализатор запросов Solr умнее, чем Lucene. Вот ваш ответ: https://lucene.apache.org/solr/guide/8_0/the-standard-query-parser.html#differences-between-lucene-s-classic-query-parser-and-solr-s-standard-query-parser
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 справочного руководства объясняет.
http://mirror.cc.columbia.edu/pub/software/apache/lucene/solr/ref-guide/apache-solr-ref-guide-6.5.pdf
По существу, используйте фигурные скобки для обозначения меньше.
?q=name:ipod AND price:{* TO 100}