在我使用lucene.net搜索地理位置搜索实现时,我从leapinggorilla.com遇到了这个article并下载了源代码但没有运气编译,我使用nugget添加了引用但仍然没有运气,并且如果我使用对象浏览器浏览程序集,则无法找到命名空间。
对我遗失的任何建议?
由于
答案 0 :(得分:1)
Lucene 3.x中的空间模块被发现是有缺陷的并且没有维护,所以它从Lucene 4.x开始消失了。 Lucene 4.x有一个新的空间模块,我和其他2个开发。如果你下载它,你应该在测试中查看“SpatialExample.java”(也许有一个.net等价物)。您也可能想观看我在Lucene / Solr Revolution中所做的演示,或者只是翻阅幻灯片: http://www.lucenerevolution.org/2013/Lucene-Solr4-Spatial-Deep-Dive
答案 1 :(得分:0)
Lucene.Net版本为3.0.3,同时也删除了3.x空间模块。 4.x空间模块从java lucene 4.x反向移植。您可以查看来源here和单元测试here
不幸的是,这意味着大多数较旧的博客文章都无法直接使用新API。但是,由于大多数API调用应该与java相同,所以我认为任何为java编写的博客文章都可以转换为.NET。
答案 2 :(得分:0)
我有一个 Lucene.NET 3.0.3解决方案,它允许在给定半径的圆内进行空间搜索,具有排序(从中心点开始)。
答案在StackOverflow上,可在GitHub找到完整的VS解决方案。
驱动空间搜索的代码的关键部分是:
var spatialArgs = new SpatialArgs(SpatialOperation.Intersects, searchArea);
var spatialQuery = _strategy.MakeQuery(spatialArgs);
var valueSource = _strategy.MakeRecipDistanceValueSource(searchArea);
var valueSourceFilter = new ValueSourceFilter(new QueryWrapperFilter(spatialQuery), valueSource, 0, 1);
var filteredSpatial = new FilteredQuery(query, valueSourceFilter); // Restricts results to searchArea
var spatialRankingQuery = new FunctionQuery(valueSource); // Orders results by distance (closest first)
var bq = new BooleanQuery();
bq.Add(filteredSpatial,Occur.MUST);
bq.Add(spatialRankingQuery,Occur.MUST);
如果有任何不清楚的地方,请告诉我。我敦促任何好奇的人下载并检查完整的解决方案。