gpt4 book ai didi

sql-server - 可以嵌套FORMSOF吗?

转载 作者:行者123 更新时间:2023-12-04 18:31:34 25 4
gpt4 key购买 nike

我正在尝试查看SQL Server的全文搜索功能是否可以某种方式使用。

我的想法是做类似的事情:选取N个关键字并搜索所述关键字及其同义词的所有形式。

我想到的是以下几方面的内容:

SELECT * 
FROM table
WHERE CONTAINS(*, CONTAINS(*,'FORMSOF(THESAURUS,FORMSOF(INFLECTIONAL,"keyword"))')


但是此查询不起作用。
这有可能吗?
我的想法合理吗,还是我会生气?

最佳答案

我认为您必须执行以下操作:

Select * from TABLE
Where
CONTAINS(*,'FORMSOF(THESAURUS,"keyword")')
OR
CONTAINS(*,'FORMSOF(INFLECTIONAL,"keyword")')


编辑

否则,您可能必须像下面这样动态构建CONTAINS搜索条件:

IF OBJECT_ID('tempdb..#A') IS NOT NULL DROP TABLE #A
IF OBJECT_ID('tempdb..#B') IS NOT NULL DROP TABLE #B

CREATE TABLE #A (pk INT IDENTITY(1,1), word nvarchar(50))
CREATE TABLE #B (word nvarchar(50))

-- load words from thesaurus
INSERT INTO #A (word)
SELECT display_term
FROM sys.dm_fts_parser('FORMSOF (THESAURUS, "mykeyword")',1033,null,0)

DECLARE @cmd NVARCHAR(1000) , @word NVARCHAR(50);
DECLARE @k INT;SET @k = ISNULL((SELECT MAX(pk) FROM #A) , 0 )

-- call INFLECTIONAL for each word
WHILE @k>0
BEGIN
SELECT @word = word FROM #A WHERE pk = @k
SET @cmd = 'INSERT INTO #B (word)
SELECT display_term
FROM sys.dm_fts_parser(''FORMSOF (INFLECTIONAL, "' + @word + '")'',1033,null,0)'
EXEC(@cmd)
SET @k = @k - 1
END

-- list all words
SELECT * FROM #B

DECLARE @FTString NVARCHAR(4000);
SET @FTString = '';

-- build the list of words for CONTAINS
SELECT @FTString =
@FTString +
+ CASE WHEN @FTString=''
THEN ''
ELSE ' OR '
END
+ '"'+word+'"'
FROM #B

-- display the CONTAINS condition
SELECT @FTString

-- final search
SELECT *
FROM dbo.MyTable AS x
WHERE CONTAINS(*, @FTString)

关于sql-server - 可以嵌套FORMSOF吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9465933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com