我正在尝试使用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时,它会显示具有文本的文件

如何修改此查询以在文件内容中搜索单词的一部分?请帮忙!

最佳答案

FREETEXT()不支持通配符。使用CONTAINS()代替。

string query =
   "SELECT System.ItemName, System.ItemUrl FROM SystemIndex " +
   "WHERE scope ='file:D:\MyFolder' and CONTAINS('\"dumm*\"')";


请注意,要搜索的部分单词必须与通配符*一起包含在双引号中。

10-08 18:31