Вопрос по – Solr - Как мне создать запрос, который требует поля NOT NULL Location

23

У меня есть индекс Solr с набором координат, хранящихся в видеLocation тип; Я хотел бы запросить документы, в которых это поле имеет ненулевое значение.

Каков синтаксис запроса для выполнения проверки NOT NULL в поле Location?

Ваш Ответ

4   ответа
-3

Попробуй этоq= !fieldname:NULL это будет эквивалентноFieldvalue НЕ НУЛЬ.

На вопрос STW У меня есть индекс Solr с набором координат, хранящихся как тип Location; Я хотел бы запросить документы, в которых это поле имеет ненулевое значение.

Каков синтаксис запроса для выполнения проверки NOT NULL в поле Location?

39

Канонический способ таков:

fieldName:[* TO *]

Используя'' с левой стороны, как предположил Пейдж Кук, вероятно, тоже будет работать, но я не доверяю этому так же, как и выше. И поскольку это относится к полю Location, вам, вероятно, придется сделать это против одного из двух лежащих в основе фактических полей по сравнению с этим логическим составным полем. Они начинают сfieldName и заканчивается каким-то числовым суффиксом; посмотрите в Обозревателе Схем, чтобы увидеть, каково настоящее имя.

Здесь важно помнить, что такой запрос обходится Solr слишком дорого, так как он выполняет полное сканирование индекса в этом поле. Если у вас есть много разных значений поля местоположения (тысячи и более?), То это большое дело. Если вы сделаете это в запросе фильтра, он будет кэширован, и, возможно, это будет спорным. Если вы хотите, чтобы этот запрос выполнялся быстро, то во время индексации вы должны проиндексировать логическое поле, чтобы указать, есть ли значение в этом поле или нет.

Благодаря Дэвиду, синтаксис [* TO *] в сочетании с проверкой обоих вспомогательных полей, кажется, работает правильно (например,field_0_coord:[* TO *] AND field_1_coord:[* TO *]). Спасибо за совет по производительности! STW
Вам не нужно делать это для обоих полей координат, что в два раза медленнее, только для одного. Если у одного есть значение, у другого - и наоборот.
7

Вы можете добавить это к вашему запросуfieldname:['' TO *], Это будет эквивалент проверки NOT NULL.

Я получил это от почты -Solr - поиски поля не нулевые

чтобы расширить немного, поле так же как поля поддержки являются числовыми; оценивая их против'' приводит к NumberFormatException STW
Извините, что я пропустил, что это было числовое. Дэвид Смайли имеет правильный ответ.
Спасибо, Пейдж, но, к сожалению, это не работает дляLocation STW
4

Для поля местоположения (solr.LatLonType) используйте следующий запрос фильтра:-fieldName:[-90,-180 TO 90,180] (координаты вне этого диапазона все еще недействительны)

Похожие вопросы