В настоящее время я изучаю возможность использования Lucene.NET для расширения возможностей поиска в веб-приложении, над которым я работаю. Однако реализуемая мною функция поиска требует не только выполнения полнотекстового поиска, но и ранжирования результатов по близости к указанному адресу.
Может ли Lucene.NET справиться с этим требованием? Или мне нужно сначала реализовать какой-то способ группировки обращений в разные места (например, менее 5 миль, менее 10 миль и т. д.), А затем использовать Lucene.NET для ранжирования элементов в этих группах? Или есть совершенно другой способ, который я не замечаю?





То, что вы ищете, называется пространственным поиском. Я не уверен, есть ли у Lucene.Net расширения для этого, но вы можете взглянуть на NHibernate Spatial. Помимо этого, эти запросы часто выполняются в базе данных. По крайней мере, PostGreSQL, MySQL и SQL Server 2008 имеют возможности пространственных запросов.
Думаю, после дополнительных исследований я нашел свой ответ. Я буду использовать Lucene.NET для фильтрации результатов поиска по другим факторам, а затем использую геокодированную информацию из Google или Yahoo для сортировки результатов по расстоянию.
Вы можете реализовать настраиваемый счетчик для ранжирования результатов в порядке расстояния, но вы должны отфильтровать результаты, прежде чем они будут эффективными. Вы можете использовать метод ограничивающих прямоугольников, отфильтровывая результаты в квадрате 20 милей вокруг вашего адреса, а затем применяя ранжирование.
Если я плохо помню, в люцене в книге действий есть пример алгоритма дистанционной релевантности. Это для java lucene, но api тот же, и вы можете легко перевести на C# или vb.net