Я читал следующую статью, http://www.searchworkings.org/blog/-/blogs/the-state-and-future-of-spatial-search/,, в которой говорится,
SpatialFilter, который использует ограничивающие рамки на основе NumericRangeQuery для простой фильтрации документов за пределами определенного диапазона.
Исследуя немного, я не вижу, что на самом деле происходит в исходном коде SOLR:
http://grepcode.com/file/repo1.maven.org/maven2/org.apache.solr/solr-core/3.1.0/org/apache/solr/schema/LatLonType.java
т.е. в строке 201 я вижу:
Query latRange = latField.getType().getRangeQuery(parser, latField,
String.valueOf(latMin),String.valueOf(latMax),true, true);
Который, кажется, использует TermRangeQuery. Переходя к javadoc NumericRangeQuery здесь 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, Java 1.5, шаг 8-битной точности). </p>
Мне действительно нужен супер быстрый NumericRangeQuery, но не похоже, чтобы я вынул его из коробки. Я должен что-то упустить.
EDIT:
LatLonType из schema.xml:
<fieldType name="location" class="solr.LatLonType" subFieldSuffix="_coordinate"/>
Что по-моему, по умолчанию поставляется с Solr ...