SQL Server 2008 Полнотекстовый поиск (FTS) против Lucene.NET - PullRequest
41 голосов
/ 31 января 2009

Я знаю, что в прошлом были вопросы о SQL 2005 по сравнению с Lucene.NET, но с 2008 года вышли, и они внесли много изменений в него, и мне было интересно, если кто-нибудь может дать мне плюсы / минусы (или ссылку на статью ).

Ответы [ 5 ]

19 голосов
/ 31 января 2009

SQL Server FTS будет проще в управлении для небольшого развертывания. Поскольку FTS интегрирована с БД, СУБД выполняет автоматическое обновление индекса. Недостатком здесь является то, что у вас нет очевидного решения для масштабирования, за исключением репликации БД. Так что если вам не нужно масштабировать, SQL Server FTS, вероятно, «безопаснее». С политической точки зрения, большинству магазинов будет удобнее использовать решение на чистом SQL Server.

На стороне Lucene я бы предпочел SOLR, а не Lucene. В любом из этих решений вам придется больше работать, самостоятельно обновляя индекс при изменении данных, а также самостоятельно сопоставляя данные с индексом SOLR / Lucene. Плюсы в том, что вы можете легко масштабировать, добавляя дополнительные индексы. Вы можете запустить эти индексы на очень бережных Linux-серверах, что устраняет некоторые затраты на лицензию. Если вы выберете маршрут Lucene / SOLR, я бы хотел поместить ВСЕ необходимые данные непосредственно в индекс, а не помещать указатели на БД в индексе. Вы можете включить в индекс данные, которые не доступны для поиска, так что, например, вы можете предварительно встроить HTML или XML в индекс и использовать его в качестве результата поиска. При таком подходе ваша БД может быть недоступна, но вы по-прежнему можете отображать результаты поиска в автономном режиме.

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

16 голосов
/ 01 февраля 2009

В 2006 году я создал базу знаний среднего размера (возможно, 2 ГБ индексированного текста) поверх FTS в SQL Server 2005, а теперь перенес ее в iFTS 2008 года. Обе ситуации хорошо сработали, но переход с 2005 на 2008 год стал для меня улучшением.

Моя ситуация НЕ была похожа на StackOverflow в том смысле, что я индексировал данные, которые обновлялись только ночью, однако я пытался соединить результаты поиска из нескольких операторов CONTAINSTABLE обратно друг с другом и с реляционными таблицами.

В FTS 2005 года это означало, что каждый CONTAINSTABLE должен будет выполнить свой поиск по индексу, вернуть полные результаты, а затем заставить механизм БД объединить эти результаты с реляционными таблицами (для меня все было прозрачно, но это происходило и был дорог для запросов). IFTS 2008 года улучшил эту ситуацию, поскольку интеграция с базой данных позволяет нескольким результатам CONTAINSTABLE стать частью плана запросов, что сделало множество запросов более эффективными.

Я думаю, что и у двигателей FTS 2005 и 2008 годов, и у Lucene.NET есть архитектурные компромиссы, которые будут лучше или хуже соответствовать многим проектным обстоятельствам - мне просто повезло, что обновление сработало в мою пользу. Я могу полностью понять, почему iFTS 2008 года не будет работать в той же конфигурации, что и 2005 год, для варианта использования с высокой степенью OLTP, например, StackOverflow.com. Тем не менее, я бы не стал сбрасывать со счетов возможность того, что iFTS 2008 года может быть изолирован от тяжелой нагрузки транзакции вставки ... но также кажется, что для этого может потребоваться столько же усилий, сколько перейти на Lucene.NET ... и круто фактор Lucene.NET трудно игнорировать;)

В любом случае, для меня простота и эффективность iFTS в SQL 2008 в большинстве ситуаций, вероятно, исключают «крутой» фактор Lucene (хотя его легко использовать, я никогда не использовал его в производственной системе, поэтому я ' зарезервирую комментарий на это). Мне было бы интересно узнать, насколько более эффективен Lucene (оказался, реализован ли он сейчас?) В StackOverflow или аналогичных ситуациях.

4 голосов
/ 31 января 2009

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

мы масштабируемся с веб-серверами, и поэтому мне нравится lucene, потому что у меня нет такой большой нагрузки на sql-сервер.

для того, чтобы начать с нуля и иметь полнотекстовый поиск, я бы предпочел решение sql-server, потому что я думаю, что это очень быстро, чтобы получить результаты, если вы хотите lucene, вы должны реализовать больше при запуске ( некоторые ноу-хау).

4 голосов
/ 31 января 2009

Это может помочь: http://blog.stackoverflow.com/2008/11/sql-2008-full-text-search-problems/

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

0 голосов
/ 03 февраля 2009

Следует учитывать одно соображение: какие ограничения поиска вы имеете в дополнение к полнотекстовому ограничению. Если вы делаете ограничения, которые lucene не может предоставить, то вы почти наверняка захотите использовать FTS. Одним из приятных моментов 2008 года является то, что они улучшили интеграцию FTS со стандартными запросами к серверу sql, поэтому производительность при смешанных ограничениях базы данных и FT должна быть лучше, чем в 2005 году.

...