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

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

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

Ответы на вопрос(4)

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

Решение Вопроса

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

fieldName:[* TO *]

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

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

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

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

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

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

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

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

 24 мая 2012 г., 03:36
Извините, что я пропустил, что это было числовое. Дэвид Смайли имеет правильный ответ.
 STW23 мая 2012 г., 21:35
чтобы расширить немного, поле так же как поля поддержки являются числовыми; оценивая их против'' приводит к NumberFormatException
 STW23 мая 2012 г., 20:53
Спасибо, Пейдж, но, к сожалению, это не работает дляLocation

Ваш ответ на вопрос