Вопрос по – Solr дистанционная фильтрация

2

Я пытаюсь сделать поиск по дальности, используя Solr.

Я знаю, что очень легко выполнить поиск в пределах 5 км. &q=*:*&fq={!geofilt pt=45.15,-93.85 sfield=store d=5}

То, что я после того, как сделать то же самое, если я смотрю в диапазоне, скажем5 to 10 km ??

Спасибо

Ваш Ответ

1   ответ
9

Вот несколько способов подойти к этому. Очевидно, что запрос переходит в запрос фильтра («fq» param), поскольку целью является не изменение оценки. И давайте предположим, что эти параметры установлены в URL-адресе запроса (хотя их не нужно размещать там):

pt=45.15,-93.85&sfield=store

Вот один из подходов:

_query_:"{!geofilt d=10}" -_query_:"{!geofilt d=5}"

Я использовал синтаксический взлом _query_ Solr для ввода подзапроса, который дает возможность переключать анализатор запросов с Lucene на гео.

Вот другой подход, который, вероятно, является самым быстрым:

{!frange l=5 u=10}geodist()

Этот запрос является функцией, возвращающей расстояние, которое затем ограничивается требуемым диапазоном. Вероятно, это быстрее, так как каждый документ будет оцениваться один раз, а не дважды, как предыдущий.

Вы можете пометить это какне кэшируется и добавьте фильтр bbox, чтобы проверять намного меньше, чем каждый документ.Here is the final result (не URL убежал):

pt=45.15,-93.85&sfield=store&fq={!frange l=5 u=10 cache=false cost=100}geodist()&fq={!bbox d=10}
В Solr 4 «геофильт» методика, используемая с типом поля RPT, должна быть более быстрой, если имеется «большой»; количество результатов в поиске. И, кроме того, если ваше пространственное поле является многозначным, вам придется использовать geofilt, и вам также потребуется создать настраиваемую совокупную форму Spatial4j, которая включает в себя внешний круг, но исключает внутренний круг. Это также сделает подход к геофильтурованию еще более быстрым, даже если у вас нет многозначных данных. Когда-нибудь в ближайшем будущем можно будет указать форму пончика, не написав свою собственную.

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