Я разрабатываю поисковую систему с java lucene 4.3. Я хотел бы понять, как я могу добавить пространственную функцию. В частности, я хотел бы использовать геохэш для начала. Я изучил всю онлайн-документацию. Я нашел следующие ссылки:
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)));
Я думаю, что это неправильно. На мой взгляд, я думаю, что я должен дать некоторый запрос сравнения строк, дающий точность сопоставления для сравнения строк геохэша.
Какой правильный путь?
Этот вопрос может быть связан с этим, но это другое.
Заранее спасибо.