Подтвердить что ты не робот

Как написать запрос solr для извлечения всех записей с числовым значением поля, которое меньше указанного?

Предположим, у нас есть набор mp3-плееров с именами и ценами.

Как написать правильный запрос solr для поиска всех товаров с определенным именем и с ценой менее 100 $?

q = "(name:(ipod) AND price???? 100.0)"

4b9b3361

Ответ 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}