Как создать фильтр с геохешем под lucene

Я разрабатываю поисковую систему с java lucene 4.3. Я хотел бы понять, как я могу добавить пространственную функцию. В частности, я хотел бы использовать геохэш для начала. Я изучил всю онлайн-документацию. Я нашел следующие ссылки:

устаревшая статья IBM

Lucene / Solr 4: видео о глубоком пространственном погружении

SpatialExample из исходного кода Lucene

Я использовал пространственный4j для кодирования lat/lng в формате geohash и добавляю строку в поле моего документа при индексации в виде следующего кода

String geohash = GeohashUtils.encodeLatLon(lat, lng);
doc.add(new StringField("geohash", geohash, Store.YES));

В методе поиска я хочу создать фильтр с параметрами поиска lat/lng, я застрял здесь

SpatialContext ctx = SpatialContext.GEO;
int maxLevels = 11;
SpatialPrefixTree grid = new GeohashPrefixTree(ctx, maxLevels); 
SpatialStrategy strategy = new RecursivePrefixTreeStrategy(grid, "geohash");
...

Что я должен делать? Должен ли я создать геохеш из поиска по широте/долготе и создать прямоугольник для сопоставления, как это?

String searchGeoHash = GeohashUtils.encodeLatLon(searchlat, searchlng);
Filter filter = strategy.makeFilter(new SpatialArgs(SpatialOperation.Intersects, GeohashUtils.decodeBoundary(searchGeoHash, ctx)));

Я думаю, что это неправильно. На мой взгляд, я думаю, что я должен дать некоторый запрос сравнения строк, дающий точность сопоставления для сравнения строк геохэша.

Какой правильный путь?

Этот вопрос может быть связан с этим, но это другое.

Заранее спасибо.


person Michelantonio Trizio    schedule 29.06.2013    source источник
comment
Как вы хотите искать функцию? Точные координаты? В ограничивающей рамке? Расстояние от заданной точки? Похоже, вы пытаетесь точно сопоставить координаты, что может не сработать из-за ошибок округления.   -  person lreeder    schedule 30.06.2013
comment
Нет, я не хочу сопоставлять точные координаты. Я хотел бы понять, как сравнить 2 геохэша, которые, на мой взгляд, представляют собой 2 ограничивающих прямоугольника. Я вычисляю сравнение геохэшей как сопоставление строк внутри, но, возможно, я этого не понял. В любом случае, моя цель - сравнить (пересечь или содержать) 2 ограничивающих прямоугольника с геохешем с заданной точностью. Спасибо.   -  person Michelantonio Trizio    schedule 30.06.2013
comment
Я до сих пор не понимаю, какова ваша цель. SpatialExample.java, на который вы ссылаетесь, должен быть идеальной ссылкой на код о том, как использовать пространственный модуль Lucene. Обратите внимание, что он не требует явного кодирования или декодирования геохэша, в отличие от ваших попыток выше. Геохеши — это внутренняя деталь, и вам не нужно ничего о ней знать.   -  person David Smiley    schedule 30.06.2013