簡體   English   中英

如何在 C# 中使用 Windows 搜索服務

[英]How to use Windows Search Service in c#

我正在開發一個應用程序,用戶可以在本地計算機或網絡上搜索文件或文件夾。 我正在使用DirectoryInfo.GetDirecotories()

  1. 但我也想添加 windows 7 用於搜索的功能,我相信使用索引。 我還在 msdn 上看到了Windows Searching Service ,但我不確定哪種方式最好:查詢索引目錄或使用搜索服務。 有什么建議?
  2. 我想知道是否有人可以在 C# 中給我一個搜索索引目錄的小例子。

提前致謝!

請參閱以下示例:

static void Main(string[] args)
{
    var connection = new OleDbConnection(@"Provider=Search.CollatorDSO;Extended Properties=""Application=Windows""");

    // File name search (case insensitive), also searches sub directories
    var query1 = @"SELECT System.ItemName FROM SystemIndex " +
                @"WHERE scope ='file:C:/' AND System.ItemName LIKE '%Test%'";

    // File name search (case insensitive), does not search sub directories
    var query2 = @"SELECT System.ItemName FROM SystemIndex " +
                @"WHERE directory = 'file:C:/' AND System.ItemName LIKE '%Test%' ";

    // Folder name search (case insensitive)
    var query3 = @"SELECT System.ItemName FROM SystemIndex " +
                @"WHERE scope = 'file:C:/' AND System.ItemType = 'Directory' AND System.Itemname LIKE '%Test%' ";

    // Folder name search (case insensitive), does not search sub directories
    var query4 = @"SELECT System.ItemName FROM SystemIndex " +
                @"WHERE directory = 'file:C:/' AND System.ItemType = 'Directory' AND System.Itemname LIKE '%Test%' ";           

    connection.Open();

    var command = new OleDbCommand(query4, connection);

    using (var r = command.ExecuteReader())
    {
        while (r.Read())
        {
            Console.WriteLine(r[0]);
        }
    }

    connection.Close();

    Console.ReadKey();
}

它使用 OLE DB api 連接到索引器服務,並使用類似 SQL 的語法在其SystemIndex表中搜索System對象。 您有 4 個執行不同操作的示例查詢。 所有示例查詢都將在c:\\文件夾中搜索名稱中包含Test項目。

您可以在本地或其他機器上搜索文件、文件夾郵件和可能的其他媒體(取決於操作系統)。 從我研究的內容來看,不支持網絡驅動器,因為它們無法被索引,但您可以連接到我假設在后台使用 RPC 的其他機器,這意味着您必須使用不同的 api(例如 System.網)。

請注意,要使其中的任何一項工作,您的索引必須在目標機器上完全可操作(默認情況下)。 api 對應於您在索引選項中指定的任何內容。 這是有問題的屏幕:

索引選項

可以在此處找到System object 的完整屬性列表: Property System Reference 該對象包含諸如 URL、路徑、名稱、日期等內容。

可以在此處找到使用不同謂詞(例如scopedirectory )的更多有趣示例: Windows Vista 搜索語法 還有一個粗略的 MSDN 文檔: SCOPE and DIRECTORY Predicates

我建議你查看文檔,因為你可以用這個 api 做很多事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM