Az index lekérdezése az ISearchQueryHelperrel

Az index lekérdezéséhez használhatja az ISearchQueryHelper felületet. Ez az interfész az ISearchCatalogManager(és ISearchCatalogManager2)segédosztályaként van implementálva, és ISearchCatalogManager::GetQueryHelpermeghívásával érhető el. Ez a felület lehetővé teszi, hogy:

  • Szerezze be az OLE DB kapcsolati sztringet a Windows Search-adatbázishoz való csatlakozáshoz.
  • Speciális lekérdezési szintaxis (AQS) felhasználói lekérdezések konvertálása a Windows Search strukturált lekérdezési nyelvre (SQL).
  • Adja meg az SQL-ben kifejezhető, de az AQS-ben nem kifejezhető lekérdezési korlátozásokat.

Ez a témakör a következőképpen van rendszerezve:

Az ISearchQueryHelper használatának első lépései

Az ISearchQueryHelper felület használatával a Windows Search programozott lekérdezése előtt érdemes tisztában lennie néhány fontos felülettel és módszerrel. Magas szinten az alábbi lépéseket kell követnie:

  1. Példányosít egy ISearchManager-példányt.

    // 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. Szerezze be az ISearchCatalogManager példányát ISearchManager::GetCataloghasználatával. A Windows Search rendszerkatalógusának neve 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. Szerezze be az ISearchQueryHelper példányát az ISearchCatalogManager::GetQueryHelperhasználatával.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. Miután rendelkezik az ISearchQueryHelperpéldányával, lekérheti a Windows Search index OLE DB-összekötőjéhez való csatlakozáshoz használt kapcsolati sztringet.

    // 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
    
    

A GenerateSqlFromUserQuery metódus használata

A ISearchQueryHelper::GenerateSQLFromUserQuery metódus a felhasználói bemenetet SQL-lekérdezési sztringgé alakítja át, amelyet aztán elküldhet a Windows Search OLE DB-szolgáltatójának. Ez a módszer lefordítja a Speciális lekérdezési szintaxis (AQS) vagy a felhasználó által megadott természetes lekérdezésszintaxis (NQS) lekérdezést az SQL-be, és szükség szerint más SQL-töredékeket is hozzáadhat.

Az SQL-lekérdezési sztring a következő formában lesz visszaadva:

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> ]
    

Az alábbi példa a hívásból visszaadott SQL-sztringre GenerateSQLFromUserQuery("comput"):

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"

Jegyzet

A metódus a FREETEXT és a CONTAINS predikátumokat is létrehozza, mivel a CONTAINS önmagában nem hoz létre értelmes rangsorolást.

 

Területi azonosítók használata

Módszer Leírás
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::put_QueryContentLocale
Lekéri/elhozza a lekérdezés nyelvkód-azonosítóját (LCID). Ez segít beszerezni a megfelelő szóelválasztót és szótövezőt, hogy összehasonlítsa a lekérdezési kifejezéseket a katalógussal/invertált indexszel. Az alapértelmezett beállítás az aktuális bemeneti területi beállítás.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::put_QueryKeywordLocale
Lekéri/beállítja a Speciális Lekérdezési Szintaxis (AQS) kulcsszavak elemzésekor használni kívánt nyelv LCID-jét. Az alapértelmezett a felhasználó alapértelmezett területi beállítása.

 

A tartalom területi és kulcsszó területi olyan területi azonosítók (LCID), amelyek segítenek a keresőmotornak a megfelelő szóhatárolók használatára a lekérdezési kifejezések nyelvének és az AQS-kulcsszavak nyelvének azonosításával. Ezek nem mindig ugyanazok az LCID-k, mivel a Windows Search számos nemzetközi verzióban érhető el, és többnyelvű felhasználói felületi (MUI) csomagokat is tartalmaz több nyelvhez. A tartalom területi beállítása azonosítja az LCID-t azon nyelvhez, amelyben a felhasználók beadják a keresési lekérdezést, míg a kulcsszó területi beállítása azonosítja azt az LCID-t, amelyet a keresőmotor használ az Advanced Query Szintaxis (AQS) kulcsszavak elemzésekor.

Ha például a English-US verzió MUI csomag nélkül érhető el, akkor a tartalom területi beállítása és a kulcsszó területi beállítása 1033. Ha a német verzió muI-csomagokkal nem rendelkezik, akkor a tartalom területi beállítása és a kulcsszó területi beállítása 1031 (gr-gr). Ha azonban a román MUI-csomaggal rendelkező angol verzióval rendelkezik, a tartalom területi beállítása 2072 (ro), a kulcsszó területi beállítása pedig 1033 (en-us).

Tulajdonságokkal és oszlopokkal való munka

Módszerek Leírás
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::put_QueryContentProperties
Lekéri/beállítja a keresés tartalomtulajdonságait (a CONTAINS vagy a FREETEXT záradékokban felsorolt tulajdonságoszlop).
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::p ut_QuerySelectColumns
Lekéri/beállítja a SELECT utasításban kért oszlopokat (vagy tulajdonságokat). Az alapértelmezett érték a System.ItemUrl és a WHERE záradékban használt tulajdonságok.

 

Az elemek sorként jelennek meg a tulajdonságtárolóban. Minden sor több oszlopot tartalmaz, amelyek az adott elem tulajdonságait jelölik. Nem minden elemnek lesz értéke egy adott tulajdonsághoz. Egy hangfájl például általában nem tartalmaz értéket a System.Property.FromName tulajdonsághoz, de a System.Music.Artist tulajdonsággal kapcsolatos információkat is tartalmazhat.

Ezekkel a metódusokkal egy vesszővel tagolt, null értékű Unicode-sztringgel érheti el vagy módosíthatja a tulajdonságot, amely a tulajdonságtároló egy vagy több oszlopnevét adja meg: "System.Document.Author, System.Document.Title".

Lekérdezési kifejezésbővítés használata

Módszerek Leírás
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::put_QueryTermExpansion
Lekéri/beállítja a kifejezésbővítés jelzőt.

 

Ez a módszer lehetővé teszi egyes lekérdezési kifejezések helyettesítő karakterekkel való kiterjesztését, hasonlóan a reguláris kifejezésbővítéshez. Az előtagbővítés ugyanazzal az előtaggal (fun/tölcsér) rendelkező szavakat keres. Ha nincs beállítva, az alapértelmezett érték SEARCH_TERM_PREFIX_ALL. A SEARCH_TERM_EXPANSION enumerálás támogatott értékei a következők:

  • SEARCH_TERM_PREFIX_ALL – Az összes keresési kifejezés ki van bontva
  • SEARCH_TERM_NO_EXPANSION – Nincs keresési kifejezés kibontva

Más ISearchQueryHelper metódusok használata

Az ISearchQueryHelperszámos metódusa lekérdezési argumentumok beállítására vagy a visszaadott tulajdonságok meghatározására szolgál.

Módszerek Leírás
ISearchQueryHelper::get_ConnectionString
Az OLE DB kapcsolati sztringet adja vissza. Ez az előnyben részesített módszer egy megfelelően formázott és helyes kapcsolati karakterlánc lekérésére.
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::put_QueryMaxResults
Lekéri/beállítja a lekérdezés által visszaadandó eredmények maximális számát (azaz a SELECT TOP n). Az alapértelmezett érték -1, ami azt jelenti, hogy a rendszer nem hoz létre maximális találati záradékot.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::put_QuerySorting
Lekéri/beállítja a lekérdezés eredményhalmazának rendezési sorrendjét (ORDER BY). Ha nincs ORDER BY záradék, a rendszer nem determinisztikus sorrendben adja vissza az eredményeket.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::put_QuerySyntax
Lekéri/beállítja a lekérdezés szintaxisát: Speciális lekérdezési szintaxis vagy természetes lekérdezési szintaxis.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::put_QueryWhereRestrictions
Lekéri/beállítja a WHERE záradékokkal kiegészített korlátozásokat.

 

Index programozott lekérdezése

Sql és AQS-megközelítések használata az index lekérdezéséhez

Az index lekérdezése a search-ms protokollal

Az index lekérdezése a Windows Search SQL szintaxisával

Speciális lekérdezési szintaxis programozott használata