Возможности полнотекстового поиска в terrasoft 3.4 и MSSQL-2012

Здравствуйте!

подскажите пожалуйтста, можно ли использовать возможности полнотекстового поиска mssql2012 в террасофт 3.4 ?

Или может быть есть идеи или готовые решения как это реализовать.

Нужно например в разделе Контакты искать полнотекстовым поиском контакты с определенными словами в описании. Т.е. допустим есть форма поиска и при введении первых букв слова или фразы, система находит совпадения по вхождению (и например выводит их в стандартном окне справочника).

Нравится

4 комментария

Здравствуйте!

Для организации полнотекстового поиска mssql2012 в Terrasoft 3.4 можете создать свой кастомный запрос который подключите в своем справочнике. Если у Вас уже настроен справочник, то можете добавить кастомное условие и использовать его для фильтрации.

Павел, спасибо!

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

Приведу пример на Контрагентах.

  1. Открываем сервис sq_Account ([Accounts\General\Main Grid\sq_Account])
  2. Добавляем новый фильтр к запросу [Custom SQL Filter]
  3. В созданном условии пишем свое условие
  4. Сохраняем запрос

Здравствуйте!

Приведу пример готового решения поиска.

1. В sql пишем функцию, которая выполняет поиск:

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 
create function [dbo].[tsf_GetContactIDsPr](@CONTAINSText nvarchar(255))
returns @Result table(ID uniqueidentifier)
as
begin
	set @CONTAINSText = rtrim(ltrim(@CONTAINSText));
		set @CONTAINSText = @CONTAINSText + '*';
		set @CONTAINSText = '"' + @CONTAINSText + '"';
		insert into @Result
		select ID
		FROM [dbo].[tbl_Contact] AS [tbl_ Contact] 
		WHERE (CONTAINS([tbl_ Contact].[Description], @CONTAINSText))	
		end
 
	return		
End

2. В Террасофт в sq_Contact добавляем пользовательский sql-фильтр

3. В фильтре прописываем вызов функции

Exists
(
select *
from dbo.tsf_GetFileIDsCONTAINSVarious(:DescripWords) b
where b.ID = [tbl_Files].[ID]
)

4. Сохраняем изменения в сервисе.

5. Активируем фильтр

var DescripWords =edtSearch.Value; //поле поиска
if (!IsEmptyValue(DescripWords)) {
	ApplyDatasetFilter(Dataset, DescripWordsFilters, DescripWords, true);
}
Показать все комментарии