我正在尝试使用Windows Search SQL语法以编程方式查询Windows Search索引
我可以使用下面的搜索查询在我的C#winforms应用程序中搜索文件内容:
string strSearchQuery =
"SELECT System.ItemName FROM SystemIndex " +
"WHERE scope ='file:" + @"C:myfolder" +
"' and FREETEXT('dummy')";
问题:但是,我无法使用此查询在文件内容中搜索单词的部分。
例如:如果一个文件(如.txt文件)包含文本"abcd",并且我搜索FREETEXT('ab')
,它不会显示该文件。
我尝试过使用:
FREETEXT('ab')
FREETEXT('*ab*')
FREETEXT('"ab"')
FREETEXT('"*ab*"')
FREETEXT('*"ab"*')
FREETEXT('ab*')
FREETEXT('"*ab*"')
FREETEXT('"ab"*')
我还尝试将CONTAINS
与上述组合一起使用,而不是使用FREETEXT
。
当我直接在Windows搜索中搜索ab
时,它会显示具有文本的文件
如何修改此查询以在文件内容中搜索单词的一部分?请帮忙!
FREETEXT()不支持通配符。请改用CONTAINS()。
string query =
"SELECT System.ItemName, System.ItemUrl FROM SystemIndex " +
"WHERE scope ='file:D:MyFolder' and CONTAINS('"dumm*"')";
请注意,要搜索的偏旁单词必须包含在双引号内,并带有通配符*字符。
通配符是%
,因此您的查询应该如下所示:
string strSearchQuery =
"SELECT System.ItemName FROM SystemIndex " +
"WHERE scope ='file:" + @"C:myfolder" +
"' and FREETEXT(%'dummy'%)";
编辑:
string strSearchQuery =
"SELECT System.ItemName FROM SystemIndex " +
"WHERE scope ='file:" + @"C:myfolder" +
"' and FREETEXT('%dummy%')";
有一个COP_VALUE_CONTAINS运算符。SQL符号为~=或~~。例如系统。全文:~="abc"。