2010-06-14 2 views
3

В настоящее время я ищу способ поиска большой базы данных (500 МБ - 10 ГБ или больше на 10 таблицах) с большим количеством разных полей (nvarchars и bigints). Многие поля, которые нужно искать, находятся не в одной таблице.MS Sql Полнотекстовый поиск против выражения LIKE

Пример: Поиски «5124» Питера должны вернуть все элементы, которые ...

  • имеет идентификатор с 5124 в нем,
  • есть «Питер» в названии или описании
  • имеют тип идентификатор элемента с 5124 в нем
  • , созданный пользователем с именем «питер» или пользователя, чей идентификатор имеет 5124 в нем
  • , созданный пользователем с «5124» или «питер» в его адрес.

Как я должен выполнить поиск? Я прочитал, что полнотекстовый поиск MS-Sql намного более эффективен, чем запрос с ключевым словом LIKE, и я думаю, что синтаксис более ясен, но я думаю, что он не может найти значения bigint (id), и я прочитал, что он имеет проблемы с индексированием и, следовательно, замедляет вставки в БД. В моем проекте будет больше вставки, чем чтение, так что это может быть вопросом.

Спасибо заранее, Marks

ответ

1

I не думайте, что вы получите требуемую производительность из MS SQL; вам понадобится построить очень сложные запросы, чтобы охватить все данные/таблицы, которые вы собираетесь искать, и у вас есть дополнительное обременение записи данных в базу данных одновременно с запросом.

Я предлагаю вам посмотреть либо Apache Solr (http://lucene.apache.org/solr/), либо Lucene (http://lucene.apache.org). Solr построен поверх Lucene, оба могут использоваться для создания индекса инвертированного файла, в основном как индекс в задней части книги (термин 1 появляется в документах 1, 3, 7 и т. Д.) Solr - это поисковая система, in-a-box, и имеет несколько механизмов, которые позволят вам рассказать, как и где индексировать данные. Lucene более низкоуровневая и позволит вам настроить свою архитектуру индексирования и поиска с большей гибкостью.

Хорошая вещь о Solr заключается в том, что он доступен как веб-служба, поэтому, если вы не знакомы с Java, вы можете найти Solr-клиент на выбранном вами языке и написать код индексирования и поиска на любом языке тебе идет. Вот ссылка на список клиентских библиотек для Solr, в том числе на C# http://wiki.apache.org/solr/IntegratingSolr Вот где я начну.

3

Вы можете попробовать автономный поисковик, например Sphinx Поиск:

http://www.sphinxsearch.com/index.html

или Apache Solr:

http://lucene.apache.org/solr/

+0

Я должен посмотреть на них, когда у меня больше времени, но я хотел бы знать решение, если остался с MS SQL Server. – Marks

+1

Вы можете использовать полнотекстовый поиск для поиска не целочисленных (ID) столбцов. Затем извлеките любые числа из поискового запроса и используйте стандартные запросы выбора SQL для проверки столбцов integer (ID). Существует несколько методов, помогающих снизить проблемы с производительностью индексирования. См. Http://stackoverflow.com/questions/933351/ms-sql-server-2000-slow-full-text-indexing. – Mike

0

Полнотекстовый поиск определенно более совершенен, чем выражение. То, что вы можете сделать, это создать полнотекстовый индекс в представлении вместо таблицы, и так как это просто поиск индекса, который впоследствии может сохранить соединения таблиц, что может немного ускорить процесс. Представление также позволит вам преобразовать столбцы bigint в varchar, которые затем могут быть проиндексированы, например, путем объединения всех столбцов, которые нужно искать вместе, как один столбец varchar. Для этого вам нужно создать представление с SCHEMABINDING и выбрать хотя бы один столбец, который является уникальным, и создать на нем кластерный уникальный индекс.

Что касается эффектов для полнотекстового ввода вставки, я не заметил большого влияния на объемную вставку, но я вижу из вопроса 3301470 о stackoverflow, кто-то упоминает, что производительность была медленной на sql 2005, но в sql 2008, который теперь исправлен. Это связано с тем, что теперь он обновляет индекс после массовой вставки, а не после каждой отдельной вставки строки (я запускаю 2008). Если вы используете 2005, то для улучшения вы можете отключить отслеживание изменений только для массовой вставки и вручную вызвать индекс обновления после.

Смежные вопросы