我的 lucene 索引的纬度和经度字段索引如下:
doc.Add(new Field("latitude", latitude.ToString() , Field.Store.YES, Field.Index.UN_TOKENIZED));
doc.Add(new Field("longitude", longitude.ToString(), Field.Store.YES, Field.Index.UN_TOKENIZED));
我想从此索引中检索一组文档,其 lat 和 long 值在给定范围内。
如您所知,Lat 和 long 可能是负值。如何在 Lucene 中正确存储带符号的十进制数?下面提到的方法会给出正确的结果还是有其他方法可以做到这一点?
Term lowerLatitude = new Term("latitude", bounds.South.ToString() );
Term upperLatitude = new Term("latitude", bounds.North.ToString());
RangeQuery latitudeRangeQuery = new RangeQuery(lowerLatitude, upperLatitude, true);
findLocationQuery.Add(latitudeRangeQuery, BooleanClause.Occur.SHOULD);
Term lowerLongitude = new Term("longitude", bounds.West.ToString());
Term upperLongitude = new Term("longitude", bounds.East.ToString());
RangeQuery longitudeRangeQuery = new RangeQuery(lowerLongitude, upperLongitude, true);
findLocationQuery.Add(longitudeRangeQuery, BooleanClause.Occur.SHOULD);
另外,我想知道 Lucene 的 ConstantScoreRangeQuery 如何比 RangeQuery 类好。
在这种情况下我面临另一个问题:我在索引中的一个文件包含以下 3 个城市:
伊利诺伊州里昂
伊利诺伊州奥克布鲁克
加利福尼亚州旧金山
如果我输入“Lyons, IL”,那么这个记录就会出现。但是,如果我将加利福尼亚州旧金山作为输入,那么它不会。
但是,如果我按如下方式存储此文档的城市:
加利福尼亚州旧金山
伊利诺伊州里昂
伊利诺伊州奥克布鲁克
当我将 San Francisco, CA 作为输入时,此记录会显示在搜索结果中。
我在这里想要的是,如果我在输入中输入 3 个城市中的任何一个,我应该在搜索结果中得到这个文档。
请帮助我实现这一目标。
谢谢。