Mengkueri Indeks dengan ISearchQueryHelper

Anda dapat menggunakan antarmuka ISearchQueryHelper untuk mengkueri indeks. Antarmuka ini diimplementasikan sebagai kelas pembantu ke ISearchCatalogManager (dan ISearchCatalogManager2), dan diperoleh dengan memanggil ISearchCatalogManager::GetQueryHelper. Antarmuka ini memungkinkan Anda untuk:

  • Dapatkan string koneksi OLE DB untuk menyambungkan ke database Windows Search.
  • Mengonversi kueri pengguna Advanced Query Syntax (AQS) ke Windows Search Bahasa Permintaan Terstruktur (SQL).
  • Tentukan pembatasan kueri yang dapat diekspresikan di SQL, tetapi tidak di AQS.

Topik ini diatur sebagai berikut:

Memulai ISearchQueryHelper

Ada beberapa antarmuka dan metode utama yang harus Anda waspadai sebelum Anda dapat mulai mengkueri Windows Search secara terprogram menggunakan antarmuka ISearchQueryHelper . Pada tingkat tinggi, Anda perlu mengikuti langkah-langkah berikut:

  1. Membuat instans ISearchManager .

    // 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. Dapatkan instans ISearchCatalogManager menggunakan ISearchManager::GetCatalog. Nama katalog sistem untuk Windows Search adalah 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. Dapatkan instans ISearchQueryHelper menggunakan ISearchCatalogManager::GetQueryHelper.

    // Call ISearchCatalogManager::GetQueryHelper to get the ISearchQueryHelper interface
    ISearchQueryHelper* pQueryHelper;
    
    hr = pSearchCatalogManager->GetQueryHelper(&pQueryHelper);
    
    
  4. Setelah Anda memiliki instans ISearchQueryHelper, Anda kemudian bisa mendapatkan string koneksi yang digunakan untuk menyambungkan ke konektor OLE DB indeks Windows Search.

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

Menggunakan Metode GenerateSqlFromUserQuery

Metode ISearchQueryHelper::GenerateSQLFromUserQuery mengubah input pengguna menjadi string kueri SQL, yang kemudian dapat dikirimkan ke penyedia OLE DB untuk Windows Search. Metode ini menerjemahkan kueri Advanced Query Syntax (AQS) atau Natural Query Syntax (NQS) yang dimasukkan oleh pengguna ke SQL, dan memungkinkan Anda menambahkan fragmen SQL lainnya sesuai kebutuhan.

String kueri SQL dikembalikan dalam formulir berikut:

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

Berikut ini adalah contoh string SQL yang dikembalikan dari panggilan 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"

Catatan

Metode ini menghasilkan predikat FREETEXT dan CONTAINS karena CONTAINS saja tidak menghasilkan peringkat yang bermakna.

 

Bekerja dengan Pengidentifikasi Lokal

Metode Deskripsi
ISearchQueryHelper::get_QueryContentLocale/
ISearchQueryHelper::p ut_QueryContentLocale
Mendapatkan/Menempatkan pengidentifikasi kode bahasa (LCID) kueri. Ini membantu mendapatkan pemecah kata dan stemmer yang benar untuk membandingkan istilah kueri dengan katalog/indeks terbalik. Defaultnya adalah lokal input saat ini.
ISearchQueryHelper::get_QueryKeywordLocale/
ISearchQueryHelper::p ut_QueryKeywordLocale
Mendapatkan/Menempatkan LCID untuk bahasa yang digunakan saat mengurai kata kunci Advanced Query Syntax (AQS). Defaultnya adalah lokal pengguna default.

 

Lokal konten dan lokal kata kunci adalah pengidentifikasi lokal (LCID) yang membantu mesin pencari menggunakan pemecah kata yang benar dengan mengidentifikasi bahasa istilah kueri dan bahasa kata kunci AQS. Ini tidak selalu LCID yang sama karena Windows Search ditawarkan di sejumlah versi internasional dan juga termasuk paket Antarmuka Pengguna Multibahasa (MUI) untuk lebih banyak bahasa. Lokal konten mengidentifikasi LCID untuk pengguna bahasa yang memasukkan kueri pencarian mereka, sementara lokal kata kunci mengidentifikasi LCID yang digunakan mesin pencari saat mengurai kata kunci Advanced Query Syntax (AQS).

Misalnya, jika Anda memiliki versi Bahasa Inggris-AS tanpa paket MUI, lokal konten dan lokal kata kunci adalah 1033. Jika Anda memiliki versi Jerman tanpa paket MUI, maka lokal konten dan lokal kata kunci adalah 1031 (gr-gr). Namun, jika Anda memiliki versi bahasa Inggris dengan paket MUI Rumania, lokal konten adalah 2072 (ro) dan lokal kata kunci adalah 1033 (en-us).

Bekerja dengan Properti dan Kolom

Metode Deskripsi
ISearchQueryHelper::get_QueryContentProperties/
ISearchQueryHelper::p ut_QueryContentProperties
Mendapatkan/Mengatur properti konten untuk pencarian (kolom properti yang tercantum dalam klausa CONTAINS atau FREETEXT).
ISearchQueryHelper::get_QuerySelectColumns/
ISearchQueryHelper::p ut_QuerySelectColumns
Mendapatkan/Mengatur kolom (atau properti) yang diminta dalam pernyataan SELECT. Defaultnya adalah System.ItemUrl dan properti yang digunakan dalam klausa WHERE.

 

Item diwakili di penyimpanan properti sebagai baris. Setiap baris berisi sejumlah kolom yang mewakili properti untuk item tersebut. Tidak semua item akan memiliki nilai untuk properti tertentu. Misalnya, file audio biasanya tidak akan berisi nilai untuk properti System.Property.FromName tetapi mungkin berisi informasi mengenai System.Music.Artist.

Dengan metode ini, Anda mengakses atau memodifikasi properti dengan string Unicode yang dibatasi koma, dihentikan null, yang menentukan satu atau beberapa nama kolom penyimpanan properti: "System.Document.Author, System.Document.Title".

Bekerja dengan Ekspansi Istilah Kueri

Metode Deskripsi
ISearchQueryHelper::get_QueryTermExpansion
ISearchQueryHelper::p ut_QueryTermExpansion
Mendapatkan/Mengatur bendera ekspansi istilah pencarian.

 

Metode ini memungkinkan perluasan beberapa istilah kueri dengan karakter kartubebas, mirip dengan ekspansi ekspresi reguler. Ekspansi awalan mencari kata-kata dengan awalan yang sama (fun/corong). Jika tidak diatur, nilai defaultnya adalah SEARCH_TERM_PREFIX_ALL. Nilai yang didukung dari enumerasi SEARCH_TERM_EXPANSION adalah sebagai berikut:

  • SEARCH_TERM_PREFIX_ALL - Semua istilah pencarian diperluas
  • SEARCH_TERM_NO_EXPANSION - Tidak ada istilah pencarian yang diperluas

Bekerja dengan Metode ISearchQueryHelper Lainnya

Banyak metode dalam antarmuka ISearchQueryHelper digunakan untuk mengatur argumen kueri atau menentukan properti yang dikembalikan.

Metode Deskripsi
ISearchQueryHelper::get_ConnectionString
Mengembalikan string koneksi OLE DB. Ini adalah metode yang disukai untuk mendapatkan string koneksi yang diformat dengan benar dan benar.
ISearchQueryHelper::get_QueryMaxResults
ISearchQueryHelper::p ut_QueryMaxResults
Mendapatkan/Mengatur jumlah maksimum hasil yang akan dikembalikan oleh kueri (yaitu, SELECT TOP n). Defaultnya adalah -1, yang berarti bahwa tidak ada klausa hasil maksimum yang dihasilkan.
ISearchQueryHelper::get_QuerySorting
ISearchQueryHelper::p ut_QuerySorting
Mendapatkan/Mengatur urutan pengurutan untuk kumpulan hasil kueri (ORDER BY). Jika tidak ada klausa ORDER BY, hasilnya dikembalikan dalam urutan non-deterministik.
ISearchQueryHelper::get_QuerySyntax
ISearchQueryHelper::p ut_QuerySyntax
Mendapatkan/Mengatur sintaks kueri: Sintaks Kueri Tingkat Lanjut atau Sintaks Kueri Alami.
ISearchQueryHelper::get_QueryWhereRestrictions
ISearchQueryHelper::p ut_QueryWhereRestrictions
Mendapatkan/Mengatur pembatasan yang ditambahkan melalui klausa WHERE.

 

Mengkueri Indeks Secara Terprogram

Menggunakan Pendekatan SQL dan AQS untuk Mengkueri Indeks

Mengkueri Indeks dengan Protokol search-ms

Mengkueri Indeks dengan Sintaks SQL Pencarian Windows

Menggunakan Sintaks Kueri Tingkat Lanjut Secara Terprogram