我正在尝试使用Windows Search SQL Syntax
以编程方式查询Windows搜索索引我可以使用下面的搜索查询在我的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
时,它会显示包含文本
如何修改此查询以搜索文件内容中单词的一部分?请帮忙!
答案 0 :(得分:2)
FREETEXT()不支持通配符。改为使用CONTAINS()。
string query =
"SELECT System.ItemName, System.ItemUrl FROM SystemIndex " +
"WHERE scope ='file:D:\MyFolder' and CONTAINS('\"dumm*\"')";
请注意,您要搜索的部分单词必须包含在双引号内,以及通配符*字符。
答案 1 :(得分:0)
通配符是%
,因此您的查询应如下所示:
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%')";
答案 2 :(得分:0)
有一个COP_VALUE_CONTAINS运算符。 SQL符号是〜=或~~。 例如。 System.FullText:〜=“abc”。