Содержит SQL - только совпадение при запуске - PullRequest
1 голос
/ 12 сентября 2011

Почему-то я не могу найти ответ в Google! Но с функцией SQL содержит, как я могу сказать, чтобы она начиналась в начале строки, т.е. я ищу полнотекстовый эквивалент НРАВИТСЯ 'some_term%'.

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

Спасибо!

Ответы [ 4 ]

7 голосов
/ 12 сентября 2011

Вы хотите что-то вроде этого:

Вместо указания нескольких терминов можно использовать «префиксный термин», если Термины начинаются с одинаковых символов. Чтобы использовать префиксный термин, укажите начальные символы, затем добавьте подстановочный знак (*) в конце срока. Заключите префикс в двойные кавычки. Следующие оператор возвращает те же результаты, что и предыдущий.

-- Search for all terms that begin with 'storm'
SELECT StormID, StormHead, StormBody FROM StormyWeather
WHERE CONTAINS(StormHead, '"storm*"')

http://www.simple -talk.com / SQL / учиться-SQL-сервер / полнотекстового индексирования-верстак /

6 голосов
/ 29 июля 2016

Вы можете использовать CONTAINS с подзапросом LIKE для сопоставления только начала:

SELECT * 
FROM (
    SELECT * 
    FROM myTable WHERE CONTAINS('"Alice in wonderland"')
) AS S1 
WHERE S1.edition LIKE 'Alice in wonderland%' 

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

0 голосов
/ 22 февраля 2013

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

  1. Я создал другую таблицу и вытащил только строки, например 'some_term%'.
  2. Теперь в этой новой таблице я реализовал полнотекстовый поиск.

Пожалуйста, сообщите мне, если вы пробовали другой лучший подход

0 голосов
/ 20 февраля 2013

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

например, обновить каждую строку, чтобы в начале текста появлялось слово xfirstword (например, Field1).Затем вы можете искать CONTAINS (Field1, 'NEAR ((xfirstword, "TERM *"), 0)')

Довольно дурацкое решение, особенно учитывая, что полнотекстовый индекс хранит фактическую позицию каждогослово в тексте (подробности см. по этой ссылке: http://msdn.microsoft.com/en-us/library/ms142551.aspx)

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