Поиск в нескольких столбцах базы данных с использованием одного поля поиска - PullRequest
1 голос
/ 23 января 2012

Мне было интересно, каков наилучший подход для поиска в базе данных по нескольким столбцам с использованием только 1 поля поиска.Сценарий ниже:

Я хочу иметь возможность искать клиентов, вводя их данные в поле поиска.Это может быть либо их имя, почтовый индекс или идентификатор.Я также могу выполнить 1 поиск, используя более 1 критерия поиска.Например, я мог искать по имени и идентификатору (Боб Смит, cus345).

Первый подход, который я выбрал, - разделить поисковый запрос, разделив каждый пробел на отдельное слово, но при этом его имя падает как имя клиента.может содержать 3-4 слова.Это может привести к множеству условных операторов, но это неэффективно, поэтому мне было интересно, есть ли лучший способ сделать это.

Я считаю, что это трудная задача, потому что пользователь может искать в любом порядке (то есть поиск по почтовому индексу, затем имени и идентификатору или имени и идентификатору и т. д.)

Ответы [ 2 ]

2 голосов
/ 23 января 2012

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

Я очень рекомендую использовать Lucene.net.Это несложно реализовать, но по умолчанию он дает ранжированные результаты, молниеносно (быстрее, чем хранимый процесс против многотерминального запроса) и легко обслуживает вид поиска, который вы описываете.Вы также можете взвешивать / смещать определенные поля, поэтому частичное совпадение почтового индекса имеет больший вес, чем совпадение по имени.

Что касается разделения поиска, я обычно запускаю проверку зарезервированных символов, таких как * и (,или даже полностью исключить их, если я не хочу, чтобы пользователь мог самостоятельно выполнять сложные поиски. Затем я разделяю границы слов и выполняю поиск AND.

Насколько я знаю, существует такжеЛюсена провайдеру Linq тоже.

0 голосов
/ 24 января 2012

Я использовал полнотекстовый поиск в проекте с аналогичными требованиями, просто вместо EF я использовал linq to sql, но я уверен, что конкретные функции полнотекстового поиска можно сопоставить через таблицу функции, с EF.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...