Windows搜索查询文件内容中word / substring的* part *

时间:2016-05-11 22:12:35

标签: c# sql search oledb windows-search

我正在尝试使用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时,它会显示包含文本

的文件

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

3 个答案:

答案 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”。