【问题标题】:Can't find Lucene.Net.Spatial.Tier namespace with the current version of Lucene.Net使用当前版本的 Lucene.Net 找不到 Lucene.Net.Spatial.Tier 命名空间
【发布时间】:2016-02-28 11:11:20
【问题描述】:

在我使用 lucene.net 搜索地理定位搜索实现时,我从leapinggorilla.com 遇到了这个article 并下载了源代码但没有编译成功,我使用 nugget 添加了引用但仍然没有运气,如果我使用对象浏览器浏览程序集,也找不到命名空间。

对我所缺少的有什么建议吗?

谢谢

【问题讨论】:

  • 这里是 LG 博客文章的作者! @David Smiley 对他的回答很满意。您会在帖子中注意到,我们必须专门从 NuGet 中提取 2.9.4.1 版本才能在 .Net 中使用空间

标签: lucene.net


【解决方案1】:

发现 Lucene 3.x 中的空间模块存在问题且未维护,因此从 Lucene 4.x 开始它就消失了。 Lucene 4.x 有一个新的空间模块,我和另外两个人一起开发。如果您下载它,您应该查看测试中的“SpatialExample.java”(也许有一个 .net 等价物)。您可能还想观看我在 Lucene/Solr Revolution 上所做的演示,或者只是翻阅幻灯片: http://www.lucenerevolution.org/2013/Lucene-Solr4-Spatial-Deep-Dive

【讨论】:

    【解决方案2】:

    Lucene.Net 的版本为 3.0.3,并且 3.x 空间模块也已从中删除。 4.x 空间模块是从 java lucene 4.x 向后移植的。可以查看源码here和单元测试here

    很遗憾,这意味着大多数旧博客文章都不能直接使用新 API。但是,由于大多数 API 调用应该与 java 的调用相同,所以我假设任何为 java 编写的博客文章都可以翻译成 .NET。

    【讨论】:

      【解决方案3】:

      我有一个 Lucene.NET 3.0.3 解决方案,它允许在给定半径的圆内按顺序进行空间搜索(从中心点)。

      答案在StackOverflow,完整的VS解决方案可以在GitHub找到。

      驱动空间搜索的代码的关键部分是:

      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);
      

      如果有任何不清楚的地方,请告诉我。我敦促任何好奇的人下载并检查完整的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-08-07
        • 2012-10-23
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        相关资源
        最近更新 更多