Solr и Rails: значение [* TO *] вместо nil (звездочка TO звездочка)

Внутри моей модели в searchable блок у меня есть индекс time added_at,

В search блок для поиска я добавил with(:added_at, nil)сделал реиндекс и теперь внутри search объект у меня есть:

<Sunspot::Search:{:fq=>["-added_at_d:[* TO *]"]...}>

В чем смысл этого [* TO *]? Что-то пошло не так?

1 ответ

Решение

Добавляя with(:added_at, nil) Вы сужаете результаты поиска до документов, которые не имеют значений в поле Added_at, поэтому мы можем ожидать, что соответствующий фильтр запроса будет определен как:

fq=>["added_at_d:null"] # not valid

Проблема в том, что Solr Standard Query Parser не поддерживает поиск в поле пустого / нулевого значения. В этой ситуации необходимо отменить фильтр (исключая документы, имеющие какое-либо значение в поле), чтобы запрос оставался действительным.

Оператор - может использоваться для исключения поля и символа подстановки * можно использовать для сопоставления с любым значением, теперь мы можем ожидать, что фильтр запроса будет выглядеть так:

fq=>["-added_at_d:*"] 

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

Запросы диапазона позволяют сопоставлять документы, значения полей которых находятся между нижней и верхней границами, указанными в запросе диапазона. Запросы диапазона могут включать или исключать верхнюю и нижнюю границы.

* может использоваться как для одной, так и для обеих конечных точек, чтобы задать запрос диапазона с открытым концом.

В конце концов, нет ничего плохого в этом фильтре, который выглядит примерно так:

fq=>["-added_at_d:[* TO *]"]

ср Запросы диапазона Lucene, стандартный анализатор запросов Solr

Другие вопросы по тегам