Смутно, следует ли использовать FREETEXTTABLE или CONTAINSTABLE

Итак, я использую полнотекстовый поиск по SQL и из того, что я читаю, CONTAINS возвращает совпадения рядом с словами, а FREETEXT возвращает слова с похожим значением, однако я не могу найти примеров, подтверждающих это.

В любом случае, по существу, я использую полнотекстовый поиск в таблице с полем описания, длина которого не превышает 2500 символов, и хочу использовать FTS. Это описание будет содержать такие вещи, как ингредиенты для продуктов питания, что лучше всего использовать, СОДЕРЖИТ или FREETEXT? То, что я хочу, чтобы мой пользователь мог искать, выглядит примерно так:

"рецепт сахара для торта

и он должен вернуть результаты с высоким рейтингом, что было бы лучше всего, FREETEXT или CONTAINs?

Ответы

Ответ 1

Я думаю, что FREETEXT - это то, что вы ищете.

Здесь это хорошее сравнение двух опций:

http://www.sitepoint.com/blogs/2006/12/06/sql-server-full-text-search-protips-part-2-contains-vs-freetext/

Если вы используете CONTAINS, WHERE становится сложным, поэтому вы не можете напрямую передавать то, что ваши пользователи ввели в вашу форму поиска:

WHERE CONTAINS(notes, 'FORMSOF(INFLECTIONAL, recipe) or FORMSOF(INFLECTIONAL, cuisine)') 

Но, если вы используете FREETEXT, вы прямо указываете "форму поиска" в том, где:

WHERE FREETEXT(notes, 'recipe for cake sugar') 

Я бы сказал, что CONTAINS полезна, если вы хотите найти что-то, где ваша программа создает запрос, потому что он намного мощнее и у вас больше контроля. С другой стороны, FREETEXT полезен, когда вы хотите сделать запрос "стиль Google", который ваш пользователь указывает в простом синтаксисе (просто слова), что искать.

Ответ 2

CONTAINSTABLE

http://msdn.microsoft.com/en-us/library/ms189760(v=SQL.90).aspx Возвращает таблицу с нулевым, одним или несколькими строками для столбцов, содержащих типы данных на основе символов, для точных или нечетких (менее точных) совпадений с одиночными словами и фразами, близостью слов на определенном расстоянии друг от друга или взвешенными совпадениями, CONTAINSTABLE можно ссылаться в предложении FROM оператора SELECT, как если бы это было обычное имя таблицы.

Запросы, использующие CONTAINSTABLE, задают полнотекстовые запросы типа-типа, которые возвращают значение ранжирования релевантности (RANK) и полнотекстовый ключ (KEY) для каждой строки. Функция CONTAINSTABLE использует те же условия поиска, что и предикат CONTAINS.

FREETEXTTABLE

http://msdn.microsoft.com/en-us/library/ms177652(v=SQL.90).aspx Возвращает таблицу с нулевым, одним или несколькими строками для столбцов, содержащих типы данных на основе символов, для значений, которые соответствуют значению, но не точной формулировке текста в указанной freetext_string. FREETEXTTABLE можно ссылаться в предложении FROM оператора SELECT, например, на имя обычной таблицы.

Запросы с использованием FREETEXTTABLE задают полнотекстовые запросы freetext, которые возвращают значение ранжирования релевантности (RANK) и полнотекстовый ключ (KEY) для каждой строки.