Menggunakan Sintaks Kueri Tingkat Lanjut Secara Terprogram

Advanced Query Syntax (AQS) adalah sintaks kueri default yang digunakan oleh Windows Search untuk mengkueri indeks dan untuk memperbaiki dan mempersempit parameter pencarian. AQS digunakan oleh pengembang untuk membangun kueri secara terprogram (dan oleh pengguna untuk mempersempit parameter pencarian mereka). Canonical AQS diperkenalkan di Windows 7 dan harus digunakan di Windows 7 dan yang lebih baru untuk menghasilkan kueri AQS secara terprogram.

Topik ini diatur sebagai berikut:

Tentang Sintaks Kueri Tingkat Lanjut

Kueri terdiri dari kueri dasar yang tersambung dengan AND, OR, dan NOT, seperti yang diperlihatkan dalam sintaks contoh berikut:

<query> ::=
     <basic query>
| ( <query> )
| <query> AND <query>  
| <query> <query>    // Same as <query> AND <query>
| <query> OR <query> 
| NOT <query>

Catatan

AQS tidak peka huruf besar/kecil, dengan pengecualian AND, OR, dan NOT, yang harus dalam huruf besar semua.

 

Jika kueri memiliki dua atau lebih penggunaan AND atau OR, kueri akan mengikat dari kiri ke kanan, terlepas dari apakah itu AND atau OR. Artinya, kueri, "apple AND pear OR plum" akan ditafsirkan seolah-olah ditulis sebagai "(apple AND pear) OR plum", dan kueri, "apple OR pear AND plum", akan ditafsirkan seolah-olah ditulis sebagai "(apple OR pear) AND plum". Jadi, jika dokumen berisi kata plum tetapi baik apel, maupun pir, kueri pertama akan mengembalikannya tetapi kueri kedua tidak akan. Oleh karena itu, kami sarankan Anda menggunakan tanda kurung eksplisit untuk setiap kueri yang mencampur DAN dan ATAU untuk menghindari kesalahan atau salah tafsir.

Kueri dasar mencari item yang memenuhi pembatasan properti. Satu-satunya bagian yang diperlukan dari kueri dasar adalah nilai pembatasan atau pencarian. Jika Anda tidak menentukan properti, Windows Search akan mencari semua properti. <restr> mewakili pembatasan pencarian.

Formulir berikut untuk kueri dasar valid:

<basic query> ::=
     <prop>:<basic restr>
| <restr>

Properti ditunjuk oleh kata kunci seperti penulis atau ukuran, atau dengan nama properti kanonis seperti System.DateModified. Formulir yang valid untuk properti adalah sebagai berikut:

<prop> ::= 
     <canonical property name>
| <property label in UI language>

Operator menunjukkan operasi seperti < atau =. Untuk daftar operator yang valid, lihat bagian Operator Kueri nanti dalam topik ini.

Pembatasan dasar adalah pembatasan sederhana pada properti yang dapat ditulis tanpa tanda kurung:

<basic restr> ::=
     <value>
| <op><value>
| NOT <basic restr>
| ( <restr> )

Pembatasan adalah nilai pencarian seperti nilai angka atau nilai string, secara opsional dengan operator. Formulir yang valid untuk pembatasan adalah sebagai berikut:

<restr> ::=
    <basic restr>
| <restr> AND <restr>
| <restr> <restr>      // Same as <restr> AND <restr>
| <restr> OR <restr>

Jika Anda tidak menentukan operator, Windows Search memilih operator yang paling tepat untuk kueri Anda:

  • Untuk properti string, operator COP_WORD_STARTSWITH $< diasumsikan.
  • Untuk semua properti lainnya, operator COP_EQUAL = diasumsikan.

Untuk penggunaan terprogram AQS, kami sarankan Anda selalu memiliki operator eksplisit. Formulir yang valid untuk mencari nilai sederhana atau rentang nilai adalah sebagai berikut:

<value> ::=
    <simplevalue>
| <simplevalue> .. <simplevalue>

Nilai sederhana dapat terdiri dari salah satu jenis berikut:

<simplevalue> ::=
  []         // No value, or a null value
| <word>     // A sequence of characters without whitespace
| <number>   // An integer or a floating point number
| <datetime> // A relative date, or an absolute date and/or time
| <Boolean>
| "..."      // A phrase
| <enumeration range>

Contoh

Kueri yang mencari dokumen yang berisi fase "kuartal terakhir", yang ditulis oleh Theresa atau Lee, dan yang disimpan ke folder MyDocs, menggabungkan tiga kueri dasar sebagai berikut:

"last quarter" author:(theresa OR lee) folder:MyDocs

Tiga kueri dasar tersebut adalah:

  • "kuartal terakhir"
  • author:(theresa OR lee)
  • folder:MyDocs

Kueri dasar yang menggunakan sintaks kanonis adalah:

System.Size:>1kb

Properti

Properti disebut dengan kata kunci, yang bisa menjadi nama properti kanonis di Windows 7 dan yang lebih baru. AQS di UI Windows dapat menggunakan label alih-alih nama properti kanonis, seperti penulis alih-alih System.Author. Di Windows Vista dan sebelumnya dimungkinkan untuk menggunakan label bahasa Inggris terlepas dari bahasa UI. Di Windows 7 dan yang lebih baru, Windows Search hanya mengenali kata kunci dalam bahasa UI default saat ini.

Dukungan untuk Properti Kustom

Di Windows Vista dan yang lebih lama, properti kustom tidak tersedia di AQS. Di Windows 7 dan yang lebih baru, AQS bekerja dengan properti kustom yang terdaftar dengan sistem properti. Untuk informasi selengkapnya tentang membuat properti kustom, lihat Sistem Properti.

Properti DateTime di Windows 8

Pada Windows 8, properti DateTime (seperti System.DateModified) mendukung format tanggal dan waktu kanonis yang ditentukan oleh ISO-8601, secara opsional termasuk zona waktu UTC.

  • Windows 8 dan yang lebih lama, tanggal-waktu tanpa zona waktu UTC:YYYY-MM-DDThh:mm:ss

    Format ini menentukan waktu lokal, terlepas dari pengguna atau lokal sistem.

  • Windows 8, tanggal-waktu dengan zona waktu UTC:YYYY-MM-DDThh:mm:ssTZD

    Format ini menentukan waktu pada zona waktu UTC yang ditentukan.

Penggunaan Kata Kunci dalam Bahasa Lokal

Di Windows 7 dan yang lebih baru, kata kunci mnemonic hanya berfungsi dalam bahasa sistem, seperti kata kunci Jerman hanya pada sistem operasi Jerman, dan kata kunci bahasa Inggris hanya pada sistem operasi Bahasa Inggris. System.Author adalah kata kunci kanonis, dan nilai mnemonic untuk properti System.Author adalah Penulis, misalnya. Pengenalan kata kunci kanonis mengimbangi fakta bahwa kata kunci mnemonik bahasa Inggris tidak lagi dikenali secara universal pada semua sistem operasi terlepas dari bahasa, seperti halnya di Windows Vista dan sebelumnya.

Catatan

Di Windows 7 dan yang lebih baru, Windows Search mengenali kata kunci hanya dalam bahasa default saat ini, dan bukan dalam bahasa Inggris kecuali bahasa Inggris adalah default saat ini. Kami menyarankan agar pengembang selalu menggunakan sintaks kanonis sehingga aplikasi mereka tidak akan memiliki masalah bahasa dengan kata kunci.

 

Sintaks Kueri Tingkat Lanjut Kanonis di Windows 7

Sintaksis kanonis diperkenalkan untuk kata kunci di Windows 7. Contoh kueri dengan properti kanonis adalah System.Message.FromAddress:=me@microsoft.com. Saat mengkoding kueri dalam aplikasi yang berjalan di Windows 7 dan yang lebih baru, Anda harus menggunakan sintaks kanonis untuk menghasilkan kueri AQS secara terprogram. Jika Anda tidak menggunakan sintaks kanonis dan aplikasi Anda disebarkan dalam bahasa lokal atau UI yang berbeda dari bahasa dalam kode aplikasi, kueri Anda tidak akan ditafsirkan dengan benar.

Konvensi untuk sintaks kata kunci kanonis adalah sebagai berikut:

  • Sintaksis kanonis untuk properti adalah nama kanonisnya, seperti System.Photo.LightSource. Nama kanonis tidak peka huruf besar/kecil.
  • Sintaksis kanonis untuk operator Boolean terdiri dari kata kunci AND, OR, dan NOT, dalam huruf besar semua.
  • <Operator , , >=, dan sebagainya, tidak dilokalkan dan dengan demikian juga merupakan bagian dari sintaks kanonis.
  • Jika properti P telah menghitung nilai atau rentang bernama N₁ melalui Nk, sintaks kanonis untuk nilai atau rentang Ith adalah nama kanonis untuk P, diikuti oleh karakter #, diikuti oleh NI, seperti yang diilustrasikan dalam contoh berikut:
    • System.Photo.LightSource#Daylight, System.Photo.LightSource#StandardA, dan sebagainya.
  • Untuk jenis semantik yang ditentukan T dengan nilai atau rentang bernama N₁ melalui Nk, sintaks kanonis untuk nilai atau rentang Ith adalah nama kanonis untuk T, diikuti oleh karakter #, diikuti oleh NI, seperti yang diilustrasikan dalam contoh berikut:
    • System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
  • Untuk nilai harfiah seperti kata atau frasa, sintaksis kanonis sama dengan sintaks reguler. Contoh kueri dengan nilai harfiah dalam sintaksis kanonis adalah:
    • System.Author:sanjay
    • System.Keywords:"Animal"
    • System.FileCount:>100

Catatan

Tidak ada sintaks kanonis untuk angka di Windows 7 dan yang lebih baru. Karena format titik mengambang bervariasi di antara lokal, penggunaan kueri kanonis yang melibatkan konstanta floating point tidak didukung. Konstanta bilangan bulat, sebaliknya, dapat ditulis hanya menggunakan digit (tidak ada pemisah untuk ribuan) dan dapat digunakan dengan aman dalam kueri kanonis di Windows 7 dan yang lebih baru.

 

Contoh

Tabel berikut ini memperlihatkan beberapa contoh properti kanonis dan sintaks untuk menggunakannya.

Jenis properti kanonis Contoh Sintaks
Nilai untai (karakter) System.Author
Nilai string dicari di properti pembuat:
System.Author:Jacobs
Rentang enumerasi System.Priority Properti prioritas dapat memiliki rentang nilai numerik:
System.Priority:System.Priority#High
Boolean System.IsDeleted
Nilai Boolean dapat digunakan dengan properti Boolean apa pun:
System.IsDeleted:System.StructuredQueryType.Boolean#TrueDan System.IsDeleted:System.StructuredQueryType.Boolean#False
Numerik System.Size
Tidak dimungkinkan untuk menulis dengan aman kueri kanonis yang melibatkan konstanta titik mengambang, karena format titik mengambang bervariasi di antara lokal. Bilangan bulat harus ditulis tanpa pemisah selama ribuan. Contohnya:
System.Size:<12345

 

Untuk informasi selengkapnya tentang properti kanonis dan sistem properti umumnya, lihat Properti Sistem. Atau, lihat file header publik.

Operator Kueri

Jika properti, p, memiliki beberapa nilai untuk beberapa item, kueri AQS untuk p:<restr> mengembalikan item jika <restr>benar untuk setidaknya salah satu nilai. (<restr> mewakili batasan.)

Sintaks yang tercantum dalam tabel berikut terdiri dari operator, simbol operator, contoh, dan deskripsi contoh. Operator dan simbol dapat digunakan dalam bahasa apa pun dan disertakan dalam kueri apa pun. Jangan gunakan operator COP_IMPLICIT atau COP_APPLICATION_SPECIFIC. Beberapa operator memiliki simbol yang dapat dipertukarkan.

Operator Simbol Contoh Deskripsi
COP_EQUAL =
System.FileExtension:=".txt"
Nilainya adalah string ".txt".
COP_NOTEQUAL
-
<>
NOT
- -
System.Kind:≠picture
System.Photo.DateTaken:-[]¹
System.Kind:<>picture
Gambar System.Kind:NOT
System.Kind:- -picture
Properti System.Kind bukan gambar.
Properti System.Photo.DateTaken memiliki nilai.
Properti System.Kind bukan gambar.
Properti System.Kind bukan gambar.
Operator NOT ganda yang diterapkan ke properti yang sama tidak membatalkan. Oleh karena itu, System.Kind:- -picture setara dengan System.Kind:-picture dan System.Kind:NOT picture.
COP_LESSTHAN <
System.Size:<1kb
Nilai ini kurang dari 1kb.
COP_GREATERTHAN >
System.ItemDate:>System.StructuredQueryType.DateTime#Today
Nilai ini lebih besar dari hari ini.
COP_LESSTHANOREQUAL <=

System.Size:<=1kb
Nilai ini kurang dari atau sama dengan 1kb.
COP_GREATERTHANOREQUAL >=

System.Size:>=1kb
Nilai ini sama dengan atau lebih besar dari 1kb.
COP_VALUE_STARTSWITH ~<
System.FileName:~<"C++ Primer"
Menemukan item di mana nama file dimulai dengan karakter "C++ Primer".
COP_VALUE_ENDSWITH ~>
System.Photo.CameraModel:~>non
Menemukan item di mana nilai properti berakhir dengan karakter non.
COP_VALUE_CONTAINS ~=
~~
System.Subject.~=round
System.Search.Autosummary:~~round
Menemukan pesan yang memiliki string ini dalam subjek, dan akan cocok dengan "aturanputaran g" misalnya.
Menemukan semua item dengan Autosummary yang berisi karakter dibulatkan.
COP_VALUE_NOTCONTAINS ~!
System.Author:~!" sanjay"
Menemukan penulis yang tidak memiliki urutan karakter"sanjay" di dalamnya.
COP_DOSWILDCARDS ~
System.FileName:~"Mic?osoft W*d"
Menemukan file di mana nama file dimulai dengan Mikrofon, diikuti oleh beberapa karakter, diikuti oleh osoft w, diikuti oleh karakter apa pun yang diakhir dengan d.
Tje? dan * karakter tidak ditafsirkan secara harfiah, dan berfungsi seperti karakter kartubebas gaya DOS:
  • ? cocok dengan satu karakter arbitrer.
  • * cocok dengan nol atau lebih karakter arbitrer.
COP_WORD_EQUAL $=
$$
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs"
Untuk Windows 7 dan yang lebih baru. Menemukan frasa "Sanjay Jacobs" di semua properti Dari. Kata Sanjay harus diikuti dengan kata Jacobs.
COP_WORD_STARTSWITH $<
System.Author:$<"San" System.Filename:$<"Micro Exe"
Untuk Windows 7 dan yang lebih baru. Menemukan item apa pun di mana Penulis berisi kata yang dimulai dengan karakter "San".
Menemukan file apa pun di mana nama file berisi kata yang dimulai dengan mikro, diikuti dengan kata yang dimulai dengan exe.

 

¹ Kurung siku kosong ([]) menunjukkan "tanpa nilai".

Untuk properti string, operasi default adalah COP_WORD_STARTS_WITH atau COP_WORD_EQUAL.

Nilai Kueri

Contoh yang berguna tentang bagaimana nilai kueri bisa dibatasi tercantum dalam tabel berikut ini.

Nilai/simbol Contoh Deskripsi
String auto
Urutan karakter apa pun yang dapat dicari. String tidak boleh berisi kombinasi spasi kosong atau karakter yang merupakan bagian dari sintaksis. Contoh ini mencari kata yang dimulai dengan otomatis.
String yang dikutip "" "Kesimpulan: valid" "The "blue"" team"
Urutan karakter apa pun. String tidak ditafsirkan sebagai bagian dari sintaks.
Tanda kutip dapat disertakan dalam kueri jika digandakan. Contoh ini mencari tim "biru".
Bilangan bulat 5678
Gunakan hanya digit untuk bilangan bulat. Jangan gunakan pemisah untuk ribuan orang.
Angka titik mengambang 5678.1234
Karena format titik mengambang bervariasi di antara lokal, kueri kanonis tidak dapat menggunakan konstanta floating point. Penggunaan sintaks kanonis dengan angka titik mengambang tidak aman untuk pelokalan.
Boolean true/false System.IsRead:=System.StructuredQueryType.Boolean#True
System.IsEncrypted:-System.StructuredQueryType.Boolean#False
Nilai TRUE Boolean.
Nilai FALSE Boolean.
[] System.Keywords:=[]
Tanda kurung siku kosong menunjukkan bahwa tidak ada nilai. Contoh ini menemukan semua item yang belum ditandai.
Tanggal absolut System.ItemDate:1/26/2010
SystemDateModified 15/10/2002 19:00
Menemukan item dengan tanggal 26 Januari 2010.
Menemukan item yang dimodifikasi pada 15 Oktober 2002 antara jam 19:00:00 dan 19:00:59.

Catatan:
Karena format tanggal (seperti format titik mengambang) bervariasi di antara lokal, penggunaan sintaks kanonis dengan tanggal absolut tidak didukung dan tidak aman pelokalan.


Tanggal relatif System.ItemDate:System.StructuredQueryType.DateTime#Today
System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth
System.Message.DateReceived:System.StructuredQueryType.DateTime#LastYear
Menemukan item dengan tanggal hari ini.
Menemukan item dengan tanggal pada bulan berikutnya.
Menemukan item dengan tanggal dalam setahun terakhir.

Catatan:
Selain mencari tanggal dan rentang tanggal tertentu, AQS mengenali nilai tanggal relatif (seperti hari ini, besok, nextweek, nextmonth), dan hari (seperti Selasa atau Senin.. Rabu), dan bulan (Februari).


.. System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10kb
Periode ganda menunjukkan rentang nilai. Menemukan item dengan tanggal antara 05/11/04 dan 10/11/04, inklusif.
Menemukan item berukuran antara 5 dan 10kb.

 

Pembatasan Cakupan

Pengguna dapat membatasi cakupan pencarian mereka ke lokasi folder atau penyimpanan data tertentu. Misalnya, jika Anda menggunakan beberapa akun email dan ingin membatasi kueri ke Microsoft Outlook atau Microsoft Outlook Express, Anda bisa menggunakan System.Search.Store:mapi atau System.Search.Store:oe masing-masing. Tabel berikut ini memperlihatkan beberapa contoh cara membatasi pencarian menurut penyimpanan data.

Membatasi pencarian menurut penyimpanan data Kata kunci Contoh
File file System.Search.Store:file
Outlook mapi System.Search.Store:mapi
Outlook Express oe System.Search.Store:oe
File offline Csc System.Search.Store:csc
Folder tertentu pada drive lokal folder System.ItemFolderNameDisplay:C:"\MyFolder"

 

Sumber Daya Tambahan

  • Di Windows 7 dan yang lebih baru, opsi menu pintasan dapat tersedia berdasarkan apakah kondisi AQS terpenuhi. Untuk informasi selengkapnya, lihat "Mendapatkan Perilaku Dinamis untuk Kata Kerja Statis dengan Menggunakan Sintaks Kueri Tingkat Lanjut" dalam Membuat Penangan Menu Konteks.
  • Kueri AQS dapat dibatasi pada jenis file tertentu, yang dikenal sebagai jenis file. Untuk informasi selengkapnya, lihat Jenis File dan Asosiasi. Untuk dokumentasi referensi properti, lihat System.Kind, dan System.KindText.

Mengkueri Indeks Secara Terprogram

Menggunakan Pendekatan SQL dan AQS untuk Mengkueri Indeks

Mengkueri Indeks dengan ISearchQueryHelper

Mengkueri Indeks dengan Protokol search-ms

Mengkueri Indeks dengan Sintaks SQL Pencarian Windows