Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Так правильно
DECLARE @txt_search VARCHAR(400) = N'"Привет*" AND "Иван*"'
19 июн 14, 12:44    [16188453]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQLAndDotNet
Как их отсортировать по степени совпадения?

http://msdn.microsoft.com/ru-ru/library/ms189760.aspx
19 июн 14, 12:44    [16188457]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQLAndDotNet
Получается в моем случае все строки одинаково соответствуют условию поиска

А вы считаете по-другому ? У вас есть свои критерии "соответствия условию поиска" ?
19 июн 14, 14:19    [16189354]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Glory
MSSQLAndDotNet
Получается в моем случае все строки одинаково соответствуют условию поиска

А вы считаете по-другому ? У вас есть свои критерии "соответствия условию поиска" ?

Я понимаю что все строки одинаково соответствуют условию поиска

Осталось переделать условие поиска
19 июн 14, 14:33    [16189494]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Что то мне ничего в голову не приходит
кроме как
учесть словоформы, тогда RANK разный будет
и оставить звездочку для неполного вхождения
19 июн 14, 14:45    [16189638]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQLAndDotNet
учесть словоформы, тогда RANK разный будет
и оставить звездочку для неполного вхождения

Вы уж определитесь, вам нужны словоформы или совпадения по началу
19 июн 14, 14:49    [16189664]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
MSSQLAndDotNet
Member

Откуда:
Сообщений: 10398
Glory
MSSQLAndDotNet
учесть словоформы, тогда RANK разный будет
и оставить звездочку для неполного вхождения

Вы уж определитесь, вам нужны словоформы или совпадения по началу

Нужны совпадения по началу
19 июн 14, 14:51    [16189683]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
iap
Member

Откуда: Москва
Сообщений: 47198
Mnior же на похожие темы раз десять писал.
И ссылки давал. Только темы поискать надо.
19 июн 14, 14:52    [16189691]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
Glory
Member

Откуда:
Сообщений: 104751
MSSQLAndDotNet
Glory
пропущено...

Вы уж определитесь, вам нужны словоформы или совпадения по началу

Нужны совпадения по началу

Для такого простого условия разумеется ранки будут одинаковыми.
Либо в строке присутствуют все заданые критерии, либо не присутствуют.
19 июн 14, 14:53    [16189701]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: MS SQL Server 2008 Полнотекстовый поиск по неполному вхождению и степени совпадения  [new]
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 Ответить