Я читал в следующей статье, http://www.searchworkings.org/blog/-/blogs/the-state-and-future-of-spatial-search/, в котором говорится,SOLR Пространственное использование NumericRangeQuery
SpatialFilter, который использует ограничивающие рамки, основанные NumericRangeQuery легко отфильтровать документы за пределами определенного диапазона.
Исследуя немного, я не вижу, что на самом деле происходит в исходном коде Solr:
Т.е. на линии 201 я вижу:
Query latRange = latField.getType().getRangeQuery(parser, latField,
String.valueOf(latMin),String.valueOf(latMax),true, true);
Который, кажется, использует TermRangeQuery. Переход через к NumericRangeQuery Javadoc здесь http://lucene.apache.org/core/old_versioned_docs/versions/3_1_0/api/all/org/apache/lucene/search/NumericRangeQuery.html, оказывается, что NumericRangeQuery, безусловно, предпочтительнее, так как это гораздо быстрее:
Сравнение различных типов RangeQueries по индексу с приблизительно 500 000 докторов показал, что TermRangeQuery в режиме булевой переписывания (с увеличенным кол-вом предложения BooleanQuery) заняло около 30-40 секунд, TermRangeQuery в режиме перезапуска фильтра с фиксированным счетом занял 5 секунд, а для выполнения этого класса потребовалось < 100 мс (на машине Opteron64, шаг 1.5).
Я очень хочу, чтобы uber быстро NumericRangeQuery, но это не похоже, что я получаю его из коробки. Я должен что-то упустить.
EDIT:
LatLonType из schema.xml:
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
Что я думаю, по умолчанию, поставляемая с Solr ...
Вы можете вставить определение своей области LatLon? – jpountz