Лучший способ частичного поиска в SQL 2008 - PullRequest
0 голосов
/ 22 января 2010

Я изучил встроенный полнотекстовый поиск SQL 2008, а также Lucene.NET ... но я не думаю, что они сделают то, что мне нужно. И я просто хочу убедиться, что я строю свою программу настолько эффективно, насколько это возможно.

Так вот и мечта. Я хочу, чтобы на странице было одно текстовое поле (например, Google), и чтобы пользователь мог вводить НИЧЕГО. И, основываясь на их тексте, я буду искать в десятках таблиц, чтобы найти то, что они ищут.

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

Таким образом, если пользователь хочет отобразить все местоположения с кодами, которые содержат «VM» («CD-VM01», «CD-VM02», «CD-VM03» и т. Д.) .. они должны иметь возможность. Или, если они хотят найти все места в Торонто, они просто набирают Торонто. Я хочу сделать поиск как можно более простым для людей. (Я обнаружил, что людям не нравится думать) ..

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

Так что, если я не использую полнотекстовый поиск (который я не могу частично), единственное, что я вижу, что у меня осталось, это "Мне нравится" ... это верно? это мой единственный вариант?

Ответы [ 3 ]

0 голосов
/ 22 января 2010

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

Недостатком является то, что в отличие от полнотекстовой индексации, вы сами несете ответственность за создание и ведение индекса.

Вы можете увидеть пример того, как можно использовать Lucene.NET .

0 голосов
/ 26 января 2010

Похоже, что самым простым / быстрым решением для этой точной проблемы было бы использование LIKE.

0 голосов
/ 22 января 2010

Полагаю, вопрос в том, что даже если бы вы смогли сделать это в базе данных, как бы вы справились с этим в пользовательском интерфейсе?

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

В окне поиска Google нужно искать только одну вещь - содержимое веб-страниц - и возвращать один тип результатов - URL-адреса веб-страниц ивыдержки.По сути, вы пытаетесь найти много разных вещей, и поэтому вам, скорее всего, придется обрабатывать каждый случай отдельно.

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

Обновление

Некоторые комментарии выражают некоторую неопределенность в отношении того, на что способен полнотекстовый поиск SQL Server.,FTS может наиболее точно искать одну строку в любом месте текста столбца, а также может выполнять другие действия (поиск по близости, поиск по свободному тексту и т. Д.). Если вы только начинаете, я бы порекомендовал TechNet страниц по теме, документация очень полная.

В частности, я бы посоветовал взглянуть на раздел Настройка каталогов и ПолучениеНачалась страница (заметки Коула: вам нужно создавать каталоги - написание CONTAINS запросов без них не продвинет вас слишком далеко).Затем взгляните на страницу запросов .Я был бы очень удивлен, если бы вы не могли найти ответы на все ваши вопросы.

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

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