Я видел, что NopCommerce (C# MVC Open Source E-Commerce) сделал с помощью полнотекстового поиска по 'продуктов' и 'варианты' и возвращать только 'продукты'. Это очень похоже на ваш случай, потому что вы хотите искать в «Thread» и «Replies», но вы, очевидно, хотите только вернуть «потоки». У меня есть изменить его, чтобы использовать темы и ответы для вас:
Во-первых, создать функцию, которая генерирует индексное название таблицы (по желанию):
CREATE FUNCTION [dbo].[nop_getprimarykey_indexname]
(
@table_name nvarchar(1000) = null
)
RETURNS nvarchar(1000)
AS
BEGIN
DECLARE @index_name nvarchar(1000)
SELECT @index_name = i.name
FROM sys.tables AS tbl
INNER JOIN sys.indexes AS i ON (i.index_id > 0 and i.is_hypothetical = 0) AND (i.object_id=tbl.object_id)
WHERE (i.is_unique=1 and i.is_disabled=0) and ([email protected]_name)
RETURN @index_name
END
GO
Затем включите Полный текст путем создания каталога и индексов :
EXEC('
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_catalogs WHERE [name] = ''myFullTextCatalog'')
CREATE FULLTEXT CATALOG [myFullTextCatalog] AS DEFAULT')
DECLARE @create_index_text nvarchar(4000)
SET @create_index_text = '
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[Table_Thread]''))
CREATE FULLTEXT INDEX ON [Table_Thread]([Subject])
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('Table_Thread') + '] ON [myFullTextCatalog] WITH CHANGE_TRACKING AUTO'
EXEC(@create_index_text)
SET @create_index_text = '
IF NOT EXISTS (SELECT 1 FROM sys.fulltext_indexes WHERE object_id = object_id(''[Table_Replies]''))
CREATE FULLTEXT INDEX ON [Table_Replies]([ReplyText])
KEY INDEX [' + dbo.[nop_getprimarykey_indexname] ('Table_Replies') + '] ON [myFullTextCatalog] WITH CHANGE_TRACKING AUTO'
EXEC(@create_index_text)
Затем, в хранимой процедуре получения продуктов по ключевым словам, создать временную таблицу со списком идентификаторов продуктов, которые соответствуют ключевым словам.
INSERT INTO #KeywordThreads ([ThreadId])
SELECT t.Id
FROM Table_Thread t with (NOLOCK)
WHERE CONTAINS(t.[Subject], @Keywords)
UNION
SELECT r.ThreadId
FROM Table_Replies r with (NOLOCK)
WHERE CONTAINS(pv.[ReplyText], @Keywords)
Теперь вы можете использовать временную таблицу #KeywordThreads
присоединиться к списку нитей и вернуть их.
Надеюсь, это поможет.
Есть ли связь между этими двумя таблицами? –