我正在使用MS SQL server 2012,我有两个表:
1)Keyword_table
包含关键字列表,例如:
keyword, nvarchar(50)
-------------------
web
book
AI
work
...
2)art_table
包含ID和文章列表,例如:
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有几百万条记录,并且它在艺术专栏上有全文索引,我知道我可以使用contains
来搜索一个简单的术语(单个词/短语),如下所示:
select *
from art_table
where contains (art, 'web')
并计算包含web
的文章数量:
select count(*)
from art_table
where contains (art, 'web')
但是如何在keyword_table中搜索ALL关键字?
提前致谢!
答案 0 :(得分:0)
尝试这样的事情:
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)
注意我没有语法测试过这个:))
答案 1 :(得分:0)
如果有人遇到同样的需求,这里有一个建议的答案:
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
,但是,这个脚本可以很好地使用数百万个索引记录!