17 t-sql full-text-search full-text-indexing
我有一个搜索表,比如说要搜索的4列文本数据.
我做这样的事情:
SELECT * FROM dbo.SearchTable
WHERE CONTAINS((co1, col2, col3, col4), 'term1 AND term2')
Run Code Online (Sandbox Code Playgroud)
如果term1和term2在同一列中,则看起来Contains仅返回true.有没有办法指定所有列都应包含在AND中?
如果没有,我的想法是JSON所有搜索列并将它们合并为一个.这样我就可以全文搜索它们,但仍然可以轻松地在.NET中提取单个列.我假设索引器不会出现问题,并且会省去JSON字符和引号.它是否正确?
谢谢
编辑
考虑到JSON的想法,抓取工具还会为属性名称编制索引,因此我必须将{name},{details},{long_details}重命名为{x1},{x2},{x3}以确保它们' d不在搜索中挑选.希望如果他们这么短,他们就不会被编入索引.
EDIT2
我可以根据系统Stoplist 创建一个Stoplist,并将属性名称放入其中.
may*_*lle 19
这应该工作:
SELECT * FROM dbo.SearchTable
WHERE CONTAINS((co1, col2, col3, col4), 'term1')
AND CONTAINS((co1, col2, col3, col4), 'term2');
Run Code Online (Sandbox Code Playgroud)
或者,您可以添加一个带有全文索引的新计算列.添加如下列:
computedCol AS col1 + ' ' + col2 + ' ' + col3 + ' ' + col4
Run Code Online (Sandbox Code Playgroud)
并创建全文索引:
CREATE FULLTEXT INDEX ON SearchTable (computedCol LANGUAGE 1033)
KEY INDEX pk_SearchTable_yourPrimaryKeyName
Run Code Online (Sandbox Code Playgroud)
然后你可以这样做:
SELECT * FROM dbo.SearchTable
WHERE CONTAINS(*, 'term1 AND term2')
Run Code Online (Sandbox Code Playgroud)