【问题标题】:How do you implement search functionality using location information in ASP.NET?如何在 ASP.NET 中使用位置信息实现搜索功能?
【发布时间】:2008-10-29 06:38:11
【问题描述】:
我目前正在研究使用 Lucene.NET 来支持我正在开发的 Web 应用程序上的搜索功能。但是,我正在实现的搜索功能不仅需要进行全文搜索,还需要根据与指定地址的接近程度对结果进行排名。
Lucene.NET 可以处理这个要求吗?或者我是否需要先实现某种方式将命中分组到不同的位置(例如,小于 5 英里、小于 10 英里等),然后使用 Lucene.NET 对这些组中的项目进行排名?还是我忽略了完全不同的方式?
【问题讨论】:
标签:
asp.net
search
lucene.net
【解决方案1】:
您可以实现自定义记分器以按距离顺序对结果进行排名,但您必须先过滤结果才能提高效率。您可以使用边界框方法,在您的地址周围 20 英里的正方形中过滤结果,然后应用排名。
如果我没记错的话,在 lucene in action book 中有一个距离相关算法的示例。它适用于 java lucene,但 api 是相同的,您可以轻松转换为 c# 或 vb.net
【解决方案2】:
您要查找的内容称为空间搜索。我不确定 Lucene.Net 是否有扩展来执行此操作,但您可以查看 NHibernate Spatial。除此之外,这些查询通常在数据库中完成。至少 PostGreSQL、MySQL 和 SQL Server 2008 具备空间查询能力。
【解决方案3】:
经过一些额外的研究,我想我可能已经找到了答案。我将使用 Lucene.NET 按其他因素过滤搜索结果,然后使用来自 Google 或 Yahoo 的地理编码信息按距离对结果进行排序。