ISearchQueryHelper ile dizini sorgulama

Dizini sorgulamak için ISearchQueryHelper arabirimini kullanabilirsiniz. Bu arabirim, hem ISearchCatalogManager hem de ISearchCatalogManager2yardımcı sınıfı olarak uygulanmakta ve ISearchCatalogManager::GetQueryHelperçağrılarak elde edilmektedir. Bu arabirim şu işlemleri gerçekleştirmenize izin verir:

  • Windows Search veritabanına bağlanmak için bir OLE DB bağlantı dizesi alın.
  • Gelişmiş Sorgu Söz Dizimi (AQS) kullanıcı sorgularını Windows Search Yapılandırılmış Sorgu Dili'ne (SQL) dönüştürün.
  • SQL'de ifade edilebilecek ancak AQS'de ifade edilmeyecek sorgu kısıtlamalarını belirtin.

Bu konu aşağıdaki gibi düzenlenmiştir:

ISearchQueryHelper ile çalışmaya başlama

ISearchQueryHelper arabirimini kullanarak Windows Search'i program aracılığıyla sorgulamaya başlamadan önce bilmeniz gereken birkaç temel arabirim ve yöntem vardır. Üst düzeyde şu adımları izlemeniz gerekir:

  1. ISearchManager örneği oluşturun.

    // Create ISearchManager instance
    ISearchManager* pSearchManager;
    
    // Use library SearchSDK.lib for CLSID_CSearchManager.
    hr = CoCreateInstance(CLSID_CSearchManager, NULL, CLSCTX_LOCAL_SERVER, IID_PPV_ARGS(&pSearchManager));      
    
  2. ISearchManager::GetCatalogkullanarak ISearchCatalogManager örneğini alın. Windows Search için sistem kataloğunun adı SYSTEMINDEX.

    // Create ISearchCatalogManager instance 
    ISearchCatalogManager* pSearchCatalogManager;
    
    // Call ISearchManager::GetCatalog for "SystemIndex" to access the catalog to the ISearchCatalogManager
    hr = pSearchManager->GetCatalog(L"SystemIndex", &pSearchCatalogManager);
    
    
  3. ISearchCatalogManager::GetQueryHelperkullanarak ISearchQueryHelper örneğini alın.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. ISearchQueryHelperbir örneğiniz olduktan sonra, Windows Search dizini OLE DB bağlayıcısına bağlanmak için kullanılan bağlantı dizesini alabilirsiniz.

    // Call get_ConnectionString to get the OLE DB connection string
    LPWSTR pszConnectionString=NULL;
    
    hr = pQueryHelper->get_ConnectionString(&pszConnectionString);
    // NOTE: YOU MUST call CoTaskMemFree() on the string
    
    

GenerateSqlFromUserQuery yöntemini kullanma

ISearchQueryHelper::GenerateSQLFromUserQuery yöntemi, kullanıcı girişini bir SQL sorgu dizesine dönüştürür ve bu dize daha sonra Windows Search için OLE DB sağlayıcısına gönderilebilir. Bu yöntem, kullanıcı tarafından SQL'e girilen Gelişmiş Sorgu Söz Dizimi (AQS) veya Doğal Sorgu Söz Dizimi (NQS) sorgusunu çevirir ve gerektiğinde diğer SQL parçalarını eklemenize olanak tanır.

SQL sorgu dizesi aşağıdaki biçimde döndürülür:

SELECT <QuerySelectColumns> 
FROM <CatalogName that created query helper>
WHERE <Result of interpreting the user query passed into this function according to QuerySyntax>
      [ AND|OR <QueryWhereRestrictions> ]
    

Aşağıda, çağrı GenerateSQLFromUserQuery("comput")döndürülen SQL dizesinin bir örneği verilmiştir:

SELECT "System.ItemUrl" 
FROM "SystemIndex" 
WHERE ((CONTAINS(*,'"comput*"',1033) RANK BY COERCION(Absolute, 1)) OR 
       (FREETEXT(("System.ItemNameDisplay":0.9, *:0.1), 'comput', 1033) AND CONTAINS(*,'"comput"',1033)))
ORDER BY "System.ItemUrl"

Not düş

yalnızca CONTAINS anlamlı bir derecelendirme oluşturmadığından yöntemi hem FREETEXT hem de CONTAINS koşullarını oluşturur.

 

Yerel ayar tanımlayıcılarıyla çalışma

Yöntem Açıklama
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::put_QueryContentLocale
Sorgunun dil kodu tanımlayıcısını (LCID) alır/yerleştirir. Bu, sorgu terimlerini katalog/ters dizinle karşılaştırabileceğiniz doğru sözcük ayırıcı ve kök bulucuyu almanıza yardımcı olur. Varsayılan değer geçerli giriş yerel ayarıdır.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::put_QueryKeywordLocale
Gelişmiş Sorgu Söz Dizimi (AQS) anahtar sözcüklerini ayrıştırırken kullanılacak dil için LCID'yi alır/yerleştirir. Varsayılan, varsayılan kullanıcı yerel ayarıdır.

 

içerik yerel ayarı ve anahtar sözcük yerel ayarı, arama altyapısının sorgu terimlerinin dilini ve AQS anahtar sözcüklerinin dilini belirleyerek doğru sözcük ayırıcılarını kullanmalarına yardımcı olan yerel ayar tanımlayıcılarıdır (LCID). Windows Search birçok uluslararası sürümde sunulduğundan ve daha fazla dil için Çok Dilde Kullanıcı Arabirimi (MUI) paketleri içerdiğinden bunlar her zaman aynı LCID'ler değildir. İçerik yerel ayarı, kullanıcıların arama sorgusunu girdikleri dil için LCID'yi tanımlarken, anahtar sözcük yerel ayarı Gelişmiş Sorgu Söz Dizimi (AQS) anahtar sözcüklerini ayrıştırırken arama altyapısının kullandığı LCID'yi tanımlar.

Örneğin, MUI paketi olmayan English-US sürümünüz varsa hem içerik yerel ayarı hem de anahtar sözcük yerel ayarı 1033'dür. MUI paketi olmayan Almanca sürümünüz varsa, hem içerik yerel ayarı hem de anahtar sözcük yerel ayarı 1031 (gr-gr). Ancak, Rumence MUI paketiyle İngilizce sürümünüz varsa, içerik yerel ayarı 2072 (ro) ve anahtar sözcük yerel ayarı 1033 (en-us).

Özellikler ve sütunlarla çalışma

Yöntemler Açıklama
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::put_QueryContentProperties
Aramanın içerik özelliklerini alır/ayarlar (CONTAINS veya FREETEXT yan tümcelerinde listelenen özellik sütunu).
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::put_QuerySelectColumns
SELECT deyiminde istenen sütunları (veya özellikleri) alır/ayarlar. Varsayılan değer System.ItemUrl ve WHERE yan tümcesinde kullanılan özelliklerdir.

 

Öğeler, özellik deposunda satır olarak gösterilir. Her satır, bu öğenin özelliklerini temsil eden bir dizi sütun içerir. Tüm öğelerin belirli bir özellik için değeri olmaz. Örneğin, bir ses dosyası genellikle System.Property.FromName özelliği için bir değer içermez, ancak System.Music.Artist ile ilgili bilgiler içerebilir.

Bu yöntemlerle, özelliğine erişir veya özelliği, özellik deposunun bir veya daha fazla sütun adını belirten virgülle ayrılmış, null olarak sonlandırılmış, Unicode dizesiyle değiştirirsiniz: "System.Document.Author, System.Document.Title".

Sorgu terimi genişletmesi üzerine çalışma

Yöntemler Açıklama
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::put_QueryTermExpansion
Arama terimi genişletme seçeneğini alır/ayarlar.

 

Bu yöntem, normal ifade genişletmeye benzer şekilde joker karakterler içeren bazı sorgu terimlerinin genişletilmesine olanak tanır. Ön ek genişletme, aynı ön eke sahip sözcükleri arar (fun/funnel). Ayarlanmazsa, varsayılan değer SEARCH_TERM_PREFIX_ALL. SEARCH_TERM_EXPANSION numaralandırmasının desteklenen değerleri aşağıdaki gibidir:

  • SEARCH_TERM_PREFIX_ALL - Tüm arama terimleri genişletildi
  • SEARCH_TERM_NO_EXPANSION - Hiçbir arama terimi genişletilmemiş

Diğer ISearchQueryHelper yöntemleriyle çalışma

ISearchQueryHelper arabirimindeki yöntemlerin çoğu sorgu bağımsız değişkenlerini ayarlamak veya döndürülen özellikleri tanımlamak için kullanılır.

Yöntemler Açıklama
ISearchQueryHelper::get_ConnectionString
OLE DB bağlantı dizesini döndürür. Bu, düzgün biçimlendirilmiş ve doğru bir bağlantı dizesi almak için tercih edilen yöntemdir.
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::put_QueryMaxResults
Sorgu tarafından döndürülecek en fazla sonuç sayısını alır/ayarlar (yani, SELECT TOP n). Varsayılan değer -1'dir, yani maksimum sonuç yan tümcesi oluşturulmaz.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::put_QuerySorting
Sorgu sonuç kümesinin sıralama düzenini alır/ayarlar (ORDER BY). ORDER BY yan tümcesi yoksa, sonuçlar belirli olmayan bir sırayla getirilir.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::put_QuerySyntax
Sorgunun söz dizimini alır/ayarlar: Gelişmiş Sorgu Söz Dizimi veya Doğal Sorgu Söz Dizimi.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::put_QueryWhereRestrictions
WHERE yan tümceleriyle eklenen kısıtlamaları alır veya ayarlar.

 

Dizin Programlı Sorgulama

Dizin Sorgulamak için SQL ve AQS Yaklaşımlarını Kullanma

search-ms Protokolü ile Dizini Sorgulama

Windows Search SQL Söz Dizimi ile Dizini Sorgulama

Gelişmiş Sorgu Söz Dizimini Program Aracılığıyla Kullanma