我使用的是2012,我有两个表:
1)包含关键字列表的Keyword_table
,如:
keyword, nvarchar(50)
-------------------
web
book
AI
work
...
2)包含ID和项目列表的art_table
,如:
artID, int art, nvarchar(MAX)
---------------------------------------
1 The Web is a system of ...
2 AI is the intelligence exhibited by machines or software ...
3 The Web includes Web 1.0, Web 2.0 and Web 3.0
4 The work done by ...
....
我希望搜索keyword_table中的每个关键字,以获得包含该关键字的文章数量,例如,根据上面的数据,结果应该如下所示:
keyword No of articles
----------------------------------
web 2
book 0
AI 1
work 1
art_table有数百万条记录,它在art列上有全文索引,我知道我可以使用contains
搜索这样一个简单的术语(单个单词/短语):
select *
from art_table
where contains (art, 'web')
并计算包含web
的文章数
select count(*)
from art_table
where contains (art, 'web')
但是如何在keyword_table中搜索所有的关键字呢?
提前感谢!
发布于 2014-04-22 16:29:16
如果有人遇到同样的需要,下面是一个建议的答案:
DECLARE @kword nvarchar(200);
DECLARE keywordCursor CURSOR FOR(SELECT keyword FROM keyword_table);
OPEN keywordCursor;
FETCH NEXT FROM keywordCursor INTO @kword;
WHILE @@FETCH_STATUS=0
BEGIN
INSERT INTO keyword_occ(keyword,occ)
VALUES(@kword,(SELECT count(*) FROM art_table WHERE CONTAINS(art, @kword)));
FETCH NEXT FROM keywordCursor INTO @kword;
END;
CLOSE keywordCursor;
DEALLOCATE keywordCursor;
GO
其中keyword_occ
是保存所需结果的表(keyword
nvarchar(200),occ
int)。
我希望我可以避免WHILE loop
,然而,这个脚本工作良好和快速与数百万索引记录!
发布于 2014-04-10 02:25:49
试着做这样的事情:
select a.* from art_table a
inner join keyword_table b
on a.art like '%' + b.keyword + '%'
这将根据关键字给出匹配,并返回包含关键字的所有记录。
编辑
或者试试这个?
select a.* from art_table a
inner join keyword_table b
on contains(a.art, b.keyword)
注意,我还没有对此进行语法测试:)
https://stackoverflow.com/questions/22977519
复制相似问题