Programowe używanie zaawansowanej składni zapytań
Zaawansowana składnia zapytań (AQS) to domyślna składnia zapytania używana przez usługę Windows Search do wykonywania zapytań względem indeksu oraz do uściślinia i zawężenia parametrów wyszukiwania. Usługa AQS jest stosowana przez deweloperów do programowego tworzenia zapytań (i przez użytkowników w celu zawężenia ich parametrów wyszukiwania). Canonical AQS został wprowadzony w systemie Windows 7 i musi być używany w systemie Windows 7 i nowszych do programowego generowania zapytań AQS.
Ten temat jest zorganizowany w następujący sposób:
- Informacje o zaawansowanej składni zapytań
- użycie słowa kluczowego w językach lokalnych
-
Kanoniczna zaawansowana składnia zapytań w systemie Windows 7
- Przykłady
- operatory zapytań
- wartości zapytania
- Ograniczenia zakresu
- dodatkowe zasoby
- Tematy pokrewne
Informacje o zaawansowanej składni zapytań
Zapytanie składa się z podstawowych zapytań połączonych z elementami AND, OR i NOT, jak pokazano w poniższej przykładowej składni:
<query> ::=
<basic query>
| ( <query> )
| <query> AND <query>
| <query> <query> // Same as <query> AND <query>
| <query> OR <query>
| NOT <query>
Notatka
AQS nie uwzględnia wielkości liter, z wyjątkiem AND, OR i NOT, które muszą być zapisane wielkimi literami.
Jeśli zapytanie zawiera co najmniej dwa elementy AND lub OR, będą one powiązane od lewej do prawej, niezależnie od tego, czy jest to AND, czy OR. Oznacza to, że zapytanie "jabłko I gruszka LUB śliwka" będzie interpretowane tak, jakby zostało napisane jako "(jabłko I gruszka) LUB śliwka", a zapytanie "jabłko LUB gruszka I śliwka" zostanie zinterpretowane tak, jakby było napisane jako "(jabłko LUB gruszka) I śliwka". Zatem, jeśli dokument zawiera słowo 'śliwka', ale ani słowa 'jabłko', ani 'gruszka', pierwsze zapytanie je zwróci, ale drugie zapytanie nie. W związku z tym zalecamy używanie jawnych nawiasów dla wszystkich zapytań, które mieszają wartości AND i OR, aby uniknąć błędów lub błędnych interpretacji.
Zapytanie podstawowe wyszukuje elementy, które spełniają ograniczenie dotyczące właściwości. Jedyną wymaganą częścią zapytania podstawowego jest ograniczenie lub wartość wyszukiwania. Jeśli nie określisz właściwości, usługa Windows Search przeszukuje wszystkie właściwości. <restr> reprezentuje ograniczenie wyszukiwania.
Prawidłowe są następujące formularze dla zapytania podstawowego:
<basic query> ::=
<prop>:<basic restr>
| <restr>
Właściwość jest wyznaczona przez słowo kluczowe, takie jak autor lub rozmiar, lub przez nazwę właściwości kanonicznej, taką jak System.DateModified. Prawidłowe formy dla właściwości są następujące:
<prop> ::=
<canonical property name>
| <property label in UI language>
Operator wskazuje operację, taką jak < lub =. Aby uzyskać listę prawidłowych operatorów, zobacz sekcję Operatory zapytań w dalszej części tego tematu.
Podstawowe ograniczenie to proste ograniczenie właściwości, które można napisać bez nawiasów:
<basic restr> ::=
<value>
| <op><value>
| NOT <basic restr>
| ( <restr> )
Ograniczenie to wartość wyszukiwania, taka jak wartość liczbowa lub wartość ciągu, opcjonalnie z operatorem. Prawidłowe formularze ograniczenia są następujące:
<restr> ::=
<basic restr>
| <restr> AND <restr>
| <restr> <restr> // Same as <restr> AND <restr>
| <restr> OR <restr>
Jeśli nie określisz operatora, usługa Windows Search wybierze najbardziej odpowiedni operator dla zapytania:
- W przypadku właściwości string zakłada się zastosowanie operatora COP_WORD_STARTSWITH $<.
- Dla wszystkich innych właściwości przyjmuje się operator COP_EQUAL = .
Zalecamy zawsze używanie jawnego operatora przy programowym korzystaniu z AQS. Prawidłowy formularz do wyszukiwania prostej wartości lub zakresu wartości jest następujący:
<value> ::=
<simplevalue>
| <simplevalue> .. <simplevalue>
Prosta wartość może składać się z dowolnego z następujących typów:
<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>
Przykłady
Zapytanie, które wyszukuje dokument zawierający fazę "ostatni kwartał", utworzone przez Theresę lub Lee, i które zostało zapisane w folderze MyDocs, łączy trzy podstawowe zapytania w następujący sposób:
"last quarter" author:(theresa OR lee) folder:MyDocs
Trzy podstawowe zapytania to:
- "ostatni kwartał"
- autor:(theresa LUB lee)
- folder:MyDocs
Podstawowe zapytanie korzystające ze składni kanonicznej to:
System.Size:>1kb
Właściwości
Właściwości są określane przez słowo kluczowe, które może być nazwą właściwości kanonicznej w systemie Windows 7 lub nowszym. AQS w interfejsie użytkownika systemu Windows może używać etykiety zamiast kanonicznej nazwy właściwości, na przykład "author" zamiast System.Author. W systemie Windows Vista i wcześniejszych można było używać etykiet angielskich niezależnie od języka interfejsu użytkownika. W systemie Windows 7 lub nowszym usługa Windows Search rozpoznaje słowa kluczowe tylko w bieżącym domyślnym języku interfejsu użytkownika.
Obsługa właściwości niestandardowych
W systemie Windows Vista i starszych właściwości niestandardowych nie były dostępne w AQS. AQS w systemie Windows 7 lub nowszym współpracuje z właściwościami niestandardowymi zarejestrowanymi w systemie właściwości. Aby uzyskać więcej informacji na temat tworzenia właściwości niestandardowych, zobacz Property System.
Właściwości daty/godziny w systemie Windows 8
Od systemu Windows 8 właściwości DateTime (takie jak System.DateModified) obsługują kanoniczny format daty i godziny określony przez ISO-8601, opcjonalnie w tym strefę czasową UTC.
systemu Windows 8 i starszych bez strefy czasowej UTC:RRRR-MM-DDThh:mm:ss
Ten format określa czas lokalny, niezależnie od ustawień regionalnych użytkownika lub systemu.
Windows 8, data/godzina ze strefą czasową UTC:RRRR-MM-DDThh:mm:ssTZD
Ten format określa czas w określonej strefie czasowej UTC.
Użycie słowa kluczowego w językach lokalnych
W systemie Windows 7 i nowszych słowa kluczowe „mnemonic” działają tylko w języku systemowym, np. niemieckie słowa kluczowe działają tylko w niemieckim systemie operacyjnym, a angielskie słowa kluczowe tylko w angielskim systemie operacyjnym. System.Author to kanoniczne słowo kluczowe, a mnemoniczna wartość dla właściwości System.Author to na przykład Author. Wprowadzenie kanonicznych słów kluczowych rekompensuje fakt, że angielskie słowa kluczowe mnemonic nie są już powszechnie rozpoznawane we wszystkich systemach operacyjnych niezależnie od języka, tak jak miało to miejsce w systemie Windows Vista i wcześniejszych wersjach.
Notatka
W systemie Windows 7 lub nowszym usługa Windows Search rozpoznaje słowa kluczowe tylko w bieżącym języku domyślnym, a nie w języku angielskim, chyba że angielski jest bieżącym ustawieniem domyślnym. Zalecamy, aby deweloperzy zawsze używali składni kanonicznej, aby ich aplikacja nie miała problemów ze słowami kluczowymi.
Kanoniczna zaawansowana składnia zapytań w systemie Windows 7
Składnia kanoniczna została wprowadzona dla słów kluczowych w systemie Windows 7. Przykładem zapytania z właściwością kanoniczną jest System.Message.FromAddress:=me@microsoft.com
. Podczas kodowania zapytań w aplikacjach działających w systemie Windows 7 lub nowszym należy użyć składni kanonicznej do programowego generowania zapytań AQS. Jeśli nie używasz składni kanonicznej i aplikacja zostanie wdrożona w języku ustawień regionalnych lub interfejsu użytkownika innym niż język w kodzie aplikacji, zapytania nie będą poprawnie interpretowane.
Konwencje składni słów kluczowych kanonicznych są następujące:
- Składnia kanoniczna właściwości jest nazwą kanoniczną, taką jak
System.Photo.LightSource
. Nazwy kanoniczne nie są wrażliwe na wielkość liter. - Składnia kanoniczna operatorów logicznych składa się ze słów kluczowych AND, OR i NOT pisanych wielkimi literami.
- Operatory <, >, = i tak dalej, nie są zlokalizowane i dlatego są również częścią składni kanonicznej.
- Jeśli właściwość
P
ma wyliczone wartości lub zakresy o nazwach N₁ do Nₖ, składnia kanoniczna dla wartości lub zakresu o indeksie Ito nazwa kanoniczna P, po której następuje znak #, a następnie NI, co ilustruje poniższy przykład.-
System.Photo.LightSource#Daylight
,System.Photo.LightSource#StandardA
itd.
-
- Dla zdefiniowanego semantycznego typu T z wartościami lub zakresami o nazwie N₁ do Nk, składnia kanoniczna dla i-tej wartości lub zakresu składa się z nazwy kanonicznej T, po której następuje znak #, a następnie Ni, jak pokazano w poniższym przykładzie:
System.Devices.LaunchDeviceStageFromExplorer:=System.StructuredQueryType.Boolean#True
- W przypadku wartości literałów, takich jak wyrazy lub frazy, składnia kanoniczna jest taka sama jak zwykła składnia. Przykłady zapytań z wartościami literalnymi w składni kanonicznej to:
System.Author:sanjay
System.Keywords:"Animal"
System.FileCount:>100
Notatka
W systemie Windows 7 i nowszych nie istnieje kanoniczna składnia dla liczb. Ponieważ formaty zmiennoprzecinkowe różnią się w zależności od ustawień regionalnych, użycie zapytania kanonicznego, które obejmuje stałą zmienną zmiennoprzecinkową, nie jest obsługiwane. Z kolei stałe całkowite mogą być zapisywane tylko przy użyciu cyfr (bez separatorów dla tysięcy) i mogą być bezpiecznie używane w zapytaniach kanonicznych w systemie Windows 7 i nowszych.
Przykłady
W poniższej tabeli przedstawiono kilka przykładów właściwości kanonicznych i składnię do ich używania.
Typ właściwości kanonicznej | Przykład | Składnia |
---|---|---|
Wartość ciągu |
System.Author |
Wartość ciągu jest wyszukiwana we właściwości author: System.Author:Jacobs |
Zakres enumeracji | System.Priorytet | Właściwość priorytetu może mieć zakres wartości liczbowych:System.Priority:System.Priority#High |
Boolean |
System.IsDeleted |
Wartości logiczne mogą być używane z dowolną właściwością logiczną:System.IsDeleted:System.StructuredQueryType.Boolean#True i System.IsDeleted:System.StructuredQueryType.Boolean#False |
Numeryczny |
System.Size |
Nie można bezpiecznie napisać kanonicznego zapytania obejmującego stałą zmiennoprzecinkową, ponieważ formaty zmiennoprzecinkowe różnią się w zależności od ustawień regionalnych. Liczby całkowite muszą być zapisywane bez separatorów dla tysięcy. Na przykład:System.Size:<12345 |
Aby uzyskać więcej informacji na temat właściwości kanonicznych i ogólnie na temat systemu właściwości, zobacz Właściwości systemu. Możesz też odwołać się do publicznych plików nagłówkowych.
Operatory zapytań
Jeśli właściwość, p, ma wiele wartości dla niektórych elementów, zapytanie AQS dla p:<restr> zwraca element, jeśli <restr> jest true dla co najmniej jednej z wartości. (<restr> reprezentuje ograniczenie).
Składnia wymieniona w poniższej tabeli składa się z operatora, symbolu operatora, przykładu i przykładowego opisu. Operator i symbol mogą być używane w dowolnym języku i zawarte w dowolnym zapytaniu. Nie używaj operatorów COP_IMPLICIT ani COP_APPLICATION_SPECIFIC. Niektóre operatory mają symbole zamienne.
Operator | Symbol | Przykład | Opis |
---|---|---|---|
COP_EQUAL | = |
System.FileExtension:=".txt" |
Wartość to ciąg ".txt". |
COP_NOTEQUAL | ≠ - <> NIE - - |
System.Kind:≠obraz System.Photo.DateTaken:-[]¹ System.Kind: obraz<> System.Rodzaj: NIE — obraz System.Kind:- -picture |
Właściwość System.Kind nie jest obrazem. Właściwość System.Photo.DateTaken ma wartość. Właściwość System.Kind nie jest obrazem. Właściwość System.Kind nie jest obrazem. Podwójne operatory NOT zastosowane do tej samej właściwości nie powodują anulowania. W związku z tym System.Kind:- -picture jest równoważne System.Kind:-picture i System.Kind:NOT picture. |
COP_MNIEJNIŻ | < |
System.Size:<1 kb |
Ta wartość jest mniejsza niż 1 kb. |
COP_WIĘKSZYNIŻ | > |
System.ItemDate:>System.StructuredQueryType.DateTime#Dziś |
Wartość ta jest dzisiaj większa niż . |
COP_LESSTHANOREQUAL |
<= ≤ |
System.Size:<=1 kb |
Ta wartość jest mniejsza lub równa 1 kb. |
COP_WIĘKSZYRÓWNY |
>= ≥ |
System.Size:>=1 kb |
Ta wartość jest równa lub większa niż 1 kb. |
WARTOŚĆ_COP_ZACZYNA_SIĘ_OD | ~< |
System.FileName:~<"C++ Primer" |
Znajduje elementy, w których nazwa pliku zaczyna się od znaków "C++ Primer". |
WARTOŚĆ_KOP_KOŃCZY_SIĘ_NA | ~> |
System.Photo.CameraModel:~>nie |
Znajduje elementy, w których wartość właściwości kończy się znakami nie. |
WARTOŚĆ_COP_ZAWIERA | ~= ~~ |
System.Subject.~=okrągły System.Search.Autosummary:~~round |
Znajduje komunikat zawierający ten ciąg w temacie i będzie pasował na przykład do "greguły okrężne". Znajduje wszystkie elementy z Autosummary, które zawierają znaki round. |
COP_WARTOŚĆ_NIE_ZAWIERA | ~! |
System.Author:~!" sanjay" |
Znajduje autorów, którzy nie mają sekwencji znaków "sanjay" w ich nazwach. |
COP_DOSWILDCARDS | ~ |
System.FileName:~"Mic?osoft W*d" |
Znajduje pliki, w których nazwa pliku zaczyna się od Mic, a następnie kilka znaków, a następnie osoft w, a następnie wszelkie znaki kończące się d. Który? znaki i * nie są interpretowane dosłownie i działają jak znaki wieloznaczne w stylu DOS:
|
COP_WORD_EQUAL | $= $$ |
System.StructuredQuery.Virtual.From:$="Sanjay Jacobs" |
W przypadku systemu Windows 7 lub nowszego. Znajduje frazę "Sanjay Jacobs" we wszystkich właściwościach From. Wyraz Sanjay musi być zgodny ze słowem Jacobs. |
COP_SŁOWO_ZACZYNA_SIĘ | $< |
System.Author:$<"San" System.Filename:$<"Micro Exe" |
W przypadku systemu Windows 7 lub nowszego. Znajduje dowolny element, w którym autor zawiera wyraz rozpoczynający się od znaków "San". Znajduje dowolny plik, w którym nazwa pliku zawiera wyraz rozpoczynający się od mikro, a następnie wyraz rozpoczynający się od exe. |
² Puste nawiasy kwadratowe ([]) oznaczają "brak wartości".
W przypadku właściwości ciągu znakowego domyślna operacja to COP_WORD_STARTS_WITH lub COP_WORD_EQUAL.
Wartości zapytania
Przydatne przykłady tego, jak można ograniczyć wartości zapytań, są wymienione w poniższej tabeli.
Wartość/symbol | Przykłady | Opis |
---|---|---|
Struna | samochód |
Dowolna sekwencja znaków, które można wyszukać. Ciąg nie może zawierać białych znaków ani kombinacji znaków, które są częścią składni. W tym przykładzie wyszukiwany jest wyraz rozpoczynający się od auto. |
Ciąg cytowany "" | "Wnioski: prawidłowe" "Zespół ""niebieski" |
Dowolna sekwencja znaków. Ciąg nie jest interpretowany jako część składni. Znaki cudzysłowu można uwzględnić w zapytaniu, jeśli zostały one dwukrotnie podwojone. W tym przykładzie zespół "niebieski". |
Liczba całkowita | 5678 |
Używaj tylko cyfr dla liczb całkowitych. Nie używaj separatorów dla tysięcy. |
Liczba zmiennoprzecinkowa | 5678.1234 |
Ponieważ formaty zmiennoprzecinkowe różnią się w zależności od ustawień regionalnych, zapytanie kanoniczne nie może używać stałej zmiennoprzecinkowej. Użycie składni kanonicznej z liczbami zmiennoprzecinkowych nie jest bezpieczne dla lokalizacji. |
Wartość logiczna prawda/fałsz | System.IsRead:=System.StructuredQueryType.Boolean#True System.IsEncrypted:-System.StructuredQueryType.Boolean#False |
Wartość logiczna true TRUE. Wartość logiczna typu Boolean FALSE. |
[] | System.Keywords:=[] |
Puste nawiasy kwadratowe oznaczają, że nie ma żadnej wartości. W tym przykładzie znaleziono wszystkie elementy, które nie zostały oznaczone. |
Daty bezwzględne | System.ItemDate:26.01.2010 SystemDateModified 15.10.2002 19:00 |
Znajduje elementy z datą 26 stycznia 2010 r. Znajduje elementy, które zostały zmodyfikowane 15 października 2002 r. między godzinami 19:00:00 i 19:00:59.
Uwaga: |
Daty względne | System.ItemDate:System.StructuredQueryType.DateTime#Today System.DateAcquired:System.StructuredQueryType.DateTime#NextMonth System.Wiadomość.OtrzymanaData:System.StrukturalnyTypZapytania.DataICzas#ZeszłyRok |
Znajduje elementy z bieżącą datą. Znajduje elementy z datą w następnym miesiącu. Znajduje elementy z datą w ciągu ostatniego roku.
Uwaga: |
.. | System.ItemDate:11/05/04..11/10/04 System.Size:5kb.. 10 kb |
Podwójne kropki wskazują zakres wartości. Znajduje elementy z datą od 11.05.04.04 do 11.10.04 włącznie. Znajduje elementy o rozmiarze od 5 do 10 kb. |
Ograniczenia zakresu
Użytkownicy mogą ograniczyć zakres wyszukiwań do określonych lokalizacji folderów lub magazynów danych. Jeśli na przykład używasz kilku kont e-mail i chcesz ograniczyć zapytanie do programu Microsoft Outlook lub Microsoft Outlook Express, możesz użyć odpowiednio System.Search.Store:mapi
lub System.Search.Store:oe
. W poniższej tabeli przedstawiono kilka przykładów ograniczania wyszukiwania według magazynu danych.
Ograniczanie wyszukiwania według magazynu danych | Słowo kluczowe | Przykład |
---|---|---|
Pliki | plik | System.Search.Store:file |
Outlook | mapi | System.Search.Store:mapi |
Outlook Express | oe | System.Search.Store:oe |
Pliki w trybie offline | Csc | System.Search.Store:csc |
Określony folder na dysku lokalnym | folder | System.ItemFolderNameDisplay:C:"\MyFolder" |
Dodatkowe zasoby
- W systemie Windows 7 i nowszych opcja menu skrótów może być dostępna na podstawie tego, czy warunek AQS jest spełniony. Aby uzyskać więcej informacji, zobacz "Getting Dynamic Behavior for Static Verbs by Using Advanced Query Syntax" (Pobieranie dynamicznego zachowania dla czasowników statycznych przy użyciu zaawansowanej składni zapytań) w Creating Context Menu Handlers.
- Zapytania AQS mogą być ograniczone do określonych typów plików, które są nazywane rodzajami plików. Aby uzyskać więcej informacji, zobacz Typy plików i skojarzenia. Aby uzyskać dokumentację dotyczącą właściwości, zobacz System.Kindi System.KindText.
Tematy pokrewne
-
Korzystanie z metod SQL i AQS do wykonywania zapytań do indeksu
-
wykonywanie zapytań względem indeksu za pomocą interfejsu ISearchQueryHelper
-
wykonywanie zapytań względem indeksu przy użyciu protokołu search-ms
-
wykonywanie zapytań względem indeksu przy użyciu składni SQL usługi Windows Search