3

我正在尝试使用Windows Search SQL 语法以编程方式查询 Windows Search 索引

我可以使用下面的搜索查询在我的 C# winforms 应用程序中搜索文件内容:

string strSearchQuery =
    "SELECT System.ItemName FROM SystemIndex " +
    "WHERE scope ='file:" + @"C:\myfolder\" + 
    "' and FREETEXT('dummy')";

ISSUE:但是,我无法使用此查询在文件内容中搜索部分单词。

例如:如果一个文件(例如 .txt 文件)包含文本“abcd”,并且我搜索FREETEXT('ab'),它不会显示该文件。

我试过使用:

  • FREETEXT('ab')
  • FREETEXT('*ab*')
  • FREETEXT('\"ab\"')
  • FREETEXT('\"*ab*\"')
  • FREETEXT('*\"ab\"*')
  • FREETEXT('ab*')
  • FREETEXT('\"*ab*\"')
  • FREETEXT('\"ab\"*')

我也尝试过使用CONTAINS上述组合而不是FREETEXT.

当我ab直接在 Windows 搜索中搜索时,它会显示包含文本的文件

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

4

3 回答 3

3

FREETEXT() 不支持通配符。请改用 CONTAINS()。

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

请注意,您要搜索的部分单词必须包含在双引号内,以及通配符 * 字符。

于 2017-02-25T21:36:20.930 回答
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%')";
于 2016-05-11T22:14:11.377 回答
0

有一个 COP_VALUE_CONTAINS 运算符。SQL 符号是 ~= 或 ~~。例如 System.FullText :~="abc"。

于 2016-05-17T18:01:32.793 回答