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