Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как организовать поиск по вхождению слов ?  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
У нас на сервере с MSSQL 2008 Express Edition таблица table1 со столбцами id, text.
таблица FTS индексирована по столбцу text.

В таблице более 100000 записей.

Нужно найти записи по вхождению слов.

Т.е. если ищем слово "трос", то в результате должны получить и записи содержащие в поле text слова "матрос","отросток" т.е слова, в которых слово "трос" может быть не только в начале, но и в любом месте слова.

Запрос

SELECT id FROM table1 WHERE CONTAINS(table1.text, N'"трос*" ')

выдает результат за 1-2 секунды, но с помощью Contains невозможно получить записи с "матрос"

SELECT id FROM table1 WHERE table1.text LIKE N'%трос%'

выдает то что надо, но очень медленно - 4 минуты.

Как можно организовать такой поиск, со временем выполнения порядка Contains?
30 сен 13, 17:32    [14902913]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
1. полнотекстовый поиск
2. сфинкс (SphinxSearch)
30 сен 13, 17:50    [14902989]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
Ваш поиск, к полнотекстовому, естественно никакого отношения не имеет. На все случаи жизни возможные варианты вхождения одного слова в другое таблицу соответствия не составить.
30 сен 13, 17:52    [14903000]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
Александр52
Member

Откуда: Кокосовые острова ส็็็็็
Сообщений: 5136
pkarklin
Ваш поиск, к полнотекстовому, естественно никакого отношения не имеет.

?
30 сен 13, 17:57    [14903018]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
AVRob
Как можно организовать такой поиск, со временем выполнения порядка Contains?

Что делать, когда Full-Text бессилен или зарисовки на тему LIKE '%искомое%'
30 сен 13, 18:08    [14903104]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Александр52
pkarklin
Ваш поиск, к полнотекстовому, естественно никакого отношения не имеет.

?

+ а вот почему
Запросы полнотекстового поиска
BOL
После добавления столбцов в полнотекстовый индекс, приложения и пользователи смогут выполнять полнотекстовые запросы к тексту из столбцов. Эти запросы могут вести поиск любых приведенных ниже элементов.
• Одно или несколько конкретных слов или фраз (простое выражение).
Слова, начинающиеся заданным текстом, или фразы с такими словами (префиксные выражения).
Словоформы конкретного слова (производное выражение).
• Слова или фразы, находящиеся рядом с другими словами или фразами (выражения с учетом расположения).
Синонимические формы конкретного слова (тезаурус).
• Слова или фразы со взвешенными значениями (взвешенное выражение)

Слово "трос" не является префиксом для "матрос" и "отросток", а также не является их словоформой или синонимом. Поэтому "матрос" и "отросток" не могут быть найдены по "трос" в случае полнотекстового поиска.
30 сен 13, 18:25    [14903202]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
AVRob
Member

Откуда: Армения, Ереван
Сообщений: 101
alexeyvg, Спасибо, интересная идея.

Меня тревожит объем таблицы ((.

Остается только посмотреть как поведет себя все это на практике.
30 сен 13, 18:29    [14903240]     Ответить | Цитировать Сообщить модератору
 Re: как организовать поиск по вхождению слов ?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31948
AVRob
Меня тревожит объем таблицы ((.

Остается только посмотреть как поведет себя все это на практике.
Хорошо поведёт, если не искать по пересеениям с короткими буквосочетаниями (скажем, найти в огромной таблице все строки с подстроками "на" и "по")
30 сен 13, 22:13    [14903996]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить