Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Здравствуйте! Есть таблица TextTable с записями: TextColumn Привет Иванов Приветиками Ивановыми Привет Иван Приветами Ивановыми Приветом Ивановым Есть критерий для поиска: Привет Иван Хочу искать по неполному вхождению и сортировать в зависимости от степени совпадения Результат должен быть таким: Привет Иван Привет Иванов Приветом Ивановым Приветами Ивановыми Приветиками Ивановыми Следующий запрос вернет все записи в которых слова начинаются с "Привет" и "Иванов" DECLARE @txt_search VARCHAR(400) = N'"Привет*" AND "Иванов*"' SELECT TextColumn FROM TextTable WHERE CONTAINS (TextColumn, @txt_search ) Как их отсортировать по степени совпадения? Спасибо. |
19 июн 14, 12:42 [16188440] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Так правильноDECLARE @txt_search VARCHAR(400) = N'"Привет*" AND "Иван*"' |
19 июн 14, 12:44 [16188453] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
http://msdn.microsoft.com/ru-ru/library/ms189760.aspx |
||
19 июн 14, 12:44 [16188457] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Сделал так:DECLARE @txt_search VARCHAR(400) = N'"Привет*" AND "Иван*"' SELECT * FROM TextTable INNER JOIN CONTAINSTABLE(TextTable , TextColumn, @txt_search) AS KEY_TBL ON org_id = KEY_TBL.[KEY] ORDER BY RANK RANK у всех записей одинаков. RANK = 144 Столбец RANK содержит значения от 0 до 1000, показывающие степень соответствия каждой строки условию поиска Получается в моем случае все строки одинаково соответствуют условию поиска |
19 июн 14, 14:17 [16189336] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А вы считаете по-другому ? У вас есть свои критерии "соответствия условию поиска" ? |
||
19 июн 14, 14:19 [16189354] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Я понимаю что все строки одинаково соответствуют условию поиска Осталось переделать условие поиска |
||||
19 июн 14, 14:33 [16189494] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Что то мне ничего в голову не приходит кроме как учесть словоформы, тогда RANK разный будет и оставить звездочку для неполного вхождения |
19 июн 14, 14:45 [16189638] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Вы уж определитесь, вам нужны словоформы или совпадения по началу |
||
19 июн 14, 14:49 [16189664] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Нужны совпадения по началу |
||||
19 июн 14, 14:51 [16189683] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47049 |
Mnior же на похожие темы раз десять писал. И ссылки давал. Только темы поискать надо. |
19 июн 14, 14:52 [16189691] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Для такого простого условия разумеется ранки будут одинаковыми. Либо в строке присутствуют все заданые критерии, либо не присутствуют. |
||||
19 июн 14, 14:53 [16189701] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Остановлюсь на этом вариантеDECLARE @txt_search VARCHAR(400) = N'"Привет*" AND "Иван*"' DECLARE @txt_search2 VARCHAR(400) = N'Привет Иван' SELECT * FROM Orgs INNER JOIN CONTAINSTABLE(Orgs, org_name, @txt_search) AS KEY_TBL ON org_id = KEY_TBL.[KEY] LEFT JOIN FREETEXTTABLE(Orgs, org_name, @txt_search2) AS KEY_TBL2 ON org_id = KEY_TBL2.[KEY] ORDER BY KEY_TBL2.RANK DESC И ранки учитывает и неполное вхождение |
19 июн 14, 16:01 [16190380] Ответить | Цитировать Сообщить модератору |
MSSQLAndDotNet Member Откуда: Сообщений: 10398 |
Правильно ли я понимаю: 1) CONTAINS найдет слова только начинающиеся с префикса ? как здесь USE AdventureWorks2012; GO SELECT Name FROM Production.Product WHERE CONTAINS(Name, ' "Chain*" '); GO 2) Если надо искать в середине слова, то только %LIKE%? Полнотекстовый поиск здесь не поможет? |
19 июн 14, 19:05 [16191591] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |