Udostępnij za pośrednictwem


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ń

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#StandardAitd.
  • 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#Truei 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:
  • ? pasuje do jednego dowolnego znaku.
  • * pasuje do zera lub więcej dowolnych znaków.
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:
Ponieważ formaty dat (takie jak formaty zmiennoprzecinkowe) różnią się w zależności od ustawień regionalnych, użycie składni kanonicznej z datami bezwzględnymi nie jest obsługiwane i nie zapewnia bezpieczeństwa lokalizacji.


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:
Oprócz wyszukiwania określonych dat i zakresów dat AQS rozpoznaje wartości dat względnych (na przykład dzisiaj, jutro, następny tydzień, następny miesiąc) i dzień (na przykład wtorek lub poniedziałek..środa) i miesiąc (lutego).


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

programowe wykonywanie zapytań względem indeksu

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