Как реализовать функцию поиска, используя информацию о местоположении в ASP.NET? - PullRequest
1 голос
/ 29 октября 2008

В настоящее время я изучаю возможность использования Lucene.NET для включения функции поиска в веб-приложении, над которым я работаю. Однако функция поиска, которую я реализую, должна не только выполнять полнотекстовый поиск, но и ранжировать результаты по близости к указанному адресу.

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

Ответы [ 3 ]

2 голосов
/ 31 октября 2008

Вы можете реализовать собственный счетчик для ранжирования результатов в порядке расстояния, но вы должны отфильтровать результаты, прежде чем они будут эффективными. Вы можете использовать метод ограничивающих рамок, отфильтровывая результаты в квадрате 20 милл вокруг вашего адреса, и после этого применять ранжирование.

Если я не помню плохо, В люцене в книге действий есть пример алгоритма релевантности расстояния. Это для Java Lucene, но API тот же, и вы можете легко перевести на c # или vb.net

0 голосов
/ 29 октября 2008

После некоторого дополнительного исследования, я думаю, что, возможно, нашел свой ответ. Я буду использовать Lucene.NET для фильтрации результатов поиска по другим факторам, а затем использовать геокодированную информацию из Google или Yahoo для сортировки результатов по расстоянию.

0 голосов
/ 29 октября 2008

То, что вы ищете, называется пространственным поиском. Я не уверен, есть ли в Lucene.Net расширения для этого, но вы можете взглянуть на NHibernate Spatial . Помимо этого, эти запросы часто выполняются в базе данных. По крайней мере, PostGreSQL, MySQL и SQL Server 2008 имеют возможности пространственных запросов.

...