我目前正在研究使用 Lucene.NET 为我正在开发的 Web 应用程序上的搜索功能提供支持。但是,我正在实现的搜索功能不仅需要进行全文搜索,还需要根据与指定地址的接近程度对结果进行排名。
Lucene.NET 可以处理这个要求吗?或者我是否需要先实现某种方式将点击分组到不同的位置(例如,小于 5 英里、小于 10 英里等),然后使用 Lucene.NET 对这些组中的项目进行排名?还是我忽略了完全不同的方式?
我目前正在研究使用 Lucene.NET 为我正在开发的 Web 应用程序上的搜索功能提供支持。但是,我正在实现的搜索功能不仅需要进行全文搜索,还需要根据与指定地址的接近程度对结果进行排名。
Lucene.NET 可以处理这个要求吗?或者我是否需要先实现某种方式将点击分组到不同的位置(例如,小于 5 英里、小于 10 英里等),然后使用 Lucene.NET 对这些组中的项目进行排名?还是我忽略了完全不同的方式?
您可以实现自定义记分器以按距离顺序对结果进行排名,但您必须先过滤结果才能提高效率。您可以使用边界框方法,在您的地址周围 20 英里的正方形中过滤结果,然后应用排名。
如果我没记错的话,在 lucene in action book 中有一个距离相关算法的例子。它适用于 java lucene,但 api 是相同的,您可以轻松转换为 c# 或 vb.net
您正在寻找的是所谓的空间搜索。我不确定 Lucene.Net 是否有扩展来做到这一点,但你可以看看NHibernate Spatial。除此之外,这些查询通常在数据库中完成。至少 PostGreSQL、MySQL 和 SQL Server 2008 具备空间查询能力。
经过一些额外的研究,我想我可能已经找到了答案。我将使用 Lucene.NET 按其他因素过滤搜索结果,然后使用来自 Google 或 Yahoo 的地理编码信息按距离对结果进行排序。