Я собираюсь предложить полнотекстовый поиск (MS 'или Lucene будет работать). Приведенный ниже код использует MSSQL FTS как то, что я использую в своем приложении в настоящий момент.
Установите FTS Search, если у вас естьужеЕсли у вас есть проверка службы запущена.В Management Studio запустите это, чтобы настроить каталог и добавить таблицу продуктов;и Цвет / Имя / Номер продукта в каталоге.
USE [AdventureWorks]
GO
CREATE FULLTEXT CATALOG [ProductsTest]WITH ACCENT_SENSITIVITY = OFF
AUTHORIZATION [dbo]
GO
USE [AdventureWorks]
GO
CREATE FULLTEXT INDEX ON [Production].[Product] KEY INDEX [PK_Product_ProductID] ON ([ProductsTest]) WITH (CHANGE_TRACKING AUTO)
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Color])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([Name])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ADD ([ProductNumber])
GO
USE [AdventureWorks]
GO
ALTER FULLTEXT INDEX ON [Production].[Product] ENABLE
GO
Затем можно выполнить запросы ко всем столбцам одновременно;например, серебро (выбрано в качестве цвета и имени)
Select * from production.product where
contains(*, '"Silver*"')
* в запросе будет найдено серебро *, так что вы можете использовать его для получения результатов при вводе пользователем. Следует учитывать, чтоGoogle делает эту работу в режиме реального времени - если вы ищете много данных, вы сможете получить данные обратно, не прерывая набор текста пользователя.я думаю, что обычно люди используют эти поиски, набирая их с первой буквы - я принимаю, что будут орфографические ошибки - вы могли бы реализовать проверку орфографии после каждого пробела, который они нажимают, возможно, чтобы справиться с этим.Или сохраните выполненные поиски, посмотрите на неправильные написания и измените код для обработки этого на основе сопоставления (или в FTS с использованием пользовательского тезауруса.)
Ранжирование будет интересной проблемой для любого разработчика.бизнес;Вы находите первый результат для Mountain Frame - или вы хотите оценить их по продажам или цене?Если пользователь вводит более одного текстового термина, вы можете использовать FTS для составления рейтинга на основе строки поиска.
select aa.rank, bb.*
From containstable(production.product, *, '"Mountain" and "Silver*"') aa
inner join production.product bb
on aa.[key] = bb.productid
order by rank desc
Возвращает 30 строк;и весовые коэффициенты на основе введенного пользователем текста для определения первой записи места.В любом случае вы, вероятно, захотите добавить закодированное ранжирование, чтобы настроить результаты в соответствии с вашими бизнес-желаниями - ранжирование виджета 1 с наивысшей ценой 1 может оказаться не лучшим решением.Вот почему вы собираетесь хранить то, что люди искали / нажимали, чтобы вы могли проанализировать результаты позже.
Существует действительно хороший анализатор языка для .Net, который переводит стиль Google.Строковый запрос, введенный на языке FTS'able, который дает знакомство с любыми логическими поисками, которые используют ваш сайт.
Вы также можете добавить некоторые умные возможности толпы путем аудита того, что пользователи вводили и в конечном итоге отправились на посещение ииспользуйте карты успеха, чтобы изменить окончательные предложения, чтобы сделать их релевантными для пользователя.
В качестве окончательного предложения, если это коммерческий веб-сайт, вы можете посмотреть Easyask , который пугаетотличный процессор естественного языка