Udostępnij za pośrednictwem


Zapisany format pliku wyszukiwania

W systemie Windows Vista i nowszych użytkownicy mogą zapisywać wyszukiwania jako folder wyszukiwania, który jest generowany przez plik XML, który przechowuje zapytanie w formularzu, który może być używany przez podsystem wyszukiwania systemu Windows. W tym temacie opisano format pliku (*.search-ms) i zawiera następujące sekcje:

Omówienie zapisanych wyszukiwań

Użytkownicy mogą zapisywać zapytanie wyszukiwania jako folder wyszukiwania, folder wirtualny wyświetlany w Eksploratorze Windows w folderze Wyszukiwania. Otwarcie folderu wyszukiwania powoduje uruchomienie zapisanego wyszukiwania i wyświetlenie up-to-date wyników. Zapisany plik wyszukiwania przechowuje zapytanie w formacie, w którym usługa Windows Search może działać, określając, co należy wyszukiwać, gdzie wyszukiwać i jak prezentować wyniki.

Zapisane wyszukiwanie jest generowane na podstawie pliku XML (*.search-ms) w folderze %userprofile%\Searches. Dane są podzielone na trzy podstawowe elementy w pliku XML:

  • <viewInfo> określa informacje o prezentacji
  • <określa> zapytania (informacje o kwerendzie wyszukiwania
  • <właściwości> określa właściwości samego pliku *.search-ms

W poniższym przykładzie przedstawiono strukturę wysokiego poziomu zapisanego pliku wyszukiwania.

<?xml version="1.0"?>
<persistedQuery version="1.0">

    <viewInfo ...>
        ...
    </viewInfo>

    <query>
        ...
    </query>

    <properties>
        ...
    </properties>

</persistedQuery>

<viewInfo, element>

Element <viewInfo> określa sposób prezentowania wyników użytkownikowi końcowemu. Poniższy przykład przedstawia strukturę elementu.

...
    <viewInfo viewMode=""
              iconSize=""
              stackIconSize=""
              autoListFlags=""
              folderFlags=""
              taskFlags=""
              displayName="">

        <visibleColumns>
            <column viewField=""/>
        </visibleColumns>

        <frequentlyUsedColumns>
            <column viewField= ""/>
        </frequentlyUsedColumns>

        <columnChooserColumns >
            <column viewField=""/>
        </columnChooserColumns >

        <groupBy viewField=""
                 direction=""/>

        <stackList>
            <stack viewField=""/>
        </stackList>

        <sortList>
            <sort viewField=""
                  direction=""/>
        </sortList>
    </viewInfo>
...

atrybuty <viewInfo>

W poniższej tabeli opisano atrybuty elementu <viewInfo>.

Atrybut Opis Wartości
viewMode Określa widok folderu. Szczegóły | Ikony | Płytki
iconSize Określa domyślny rozmiar ikon i miniatur dla elementów, gdy nie stosu. Liczba całkowita z zakresu od 16 do 256
stackIconSize Tylko do użytku wewnętrznego. Nie używaj. N/a
displayName Tylko do użytku wewnętrznego. Nie używaj. N/a
autoListFlags Tylko do użytku wewnętrznego. Nie używaj. N/a
folderFlags Tylko do użytku wewnętrznego. Nie używaj. N/a
taskFlags Tylko do użytku wewnętrznego. Nie używaj. N/a

<viewInfo> elementów podrzędnych

Elementy podrzędne elementu <viewInfo> określają kolumny wyświetlane w wynikach wyszukiwania Eksploratora Windows oraz sposób grupowania i sortowania wyników. Każdy element podrzędny zawiera uporządkowany zestaw kolumn identyfikowany przez nazwy kanoniczne właściwości systemowych (na przykład System.DisplayName). Jeśli nie zdefiniowano w zapisanym pliku wyszukiwania, wyniki wyszukiwania są wyświetlane z domyślnym zestawem kolumn odpowiednich dla wyświetlanych typów plików.

Pierwiastek Opis Wartości
visibleColumns Określa uporządkowaną listę kolumn, które mają być wyświetlane w widoku wyników. Użytkownik może zmienić tę listę. Dowolna właściwość systemowa.
frequentlyUsedColumns Tylko do użytku wewnętrznego. Nie używaj. N/a
columnChooserColumns Tylko do użytku wewnętrznego. Nie używaj. N/a
groupBy Określa pojedynczą właściwość systemową, według której mają być grupowane wyniki. Użytkownik może zmienić tę wartość. Dowolna właściwość systemowa.
sortList Określa uporządkowaną listę kolumn do sortowania wyników według. Maksymalnie cztery właściwości systemowe. Użytkownik może zmienić tę listę.
stackList Tylko do użytku wewnętrznego. Nie używaj. N/a

<query>, element

Zapytanie <> element określa atrybuty definiujące sposób wykonywania zapytań dotyczących wyników. Poniższy przykład przedstawia strukturę elementu.

...
    <query>
        <providers>
            <provider clsid=""/>    <!-- Do not use -->
        </providers>

        <subQueries>
            <subQuery path=""/>           <!-- Do not use -->
            <subQuery knownSearch=""/>    <!-- Do not use -->
        </subQueries>

        <scope>
            <include path=""        nonRecursive=""/>   <!-- [path of location to include] -->
            <include knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
            <exclude path=""        nonRecursive=""/>   <!-- [path of location to exclude] -->
            <exclude knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
        </scope>

        <kindList>
            <kind name=""/>     <!-- Kind value -->
        </kindList>

        <conditions>
            <condition type="" ...>     <!-- andCondition | orCondition | notCondition | leafCondition -->
                <attributes>
                    <attribute attributeID="" .../> <!-- Do not use -->
                </attributes>
            </condition>
        </conditions>
    </query>
...

<zapytania> elementów podrzędnych

W poniższej tabeli opisano elementy podrzędne <zakresu>.

Pierwiastek Opis Wartość
Dostawców Tylko do użytku wewnętrznego. Nie używaj. N/a
podzapytania Tylko do użytku wewnętrznego. Nie używaj. N/a
Zakres Identyfikuje lokalizacje do uwzględnienia lub wykluczenia w wyszukiwaniu. Ścieżka lub znany identyfikator folderu lokalizacji, która ma zostać dołączona lub wykluczona. Ten element może również określić, czy wyszukiwanie powinno zawierać/wykluczać ścieżki podrzędne (płytkie lub głębokie wyszukiwanie).
kindList Określa rodzaj plików do wyszukania. Dowolna wartość System.Kind.
Warunki Określa reguły filtrowania wyników. Na przykład wyniki mogą być ograniczone do wiadomości e-mail wysłanych przez lub do określonej osoby. andCondition, orCondition, notCondition, leafCondition.

<zakres>, element

Element <zakresu> identyfikuje lokalizacje do uwzględnienia lub wykluczenia z wyszukiwania. Element> zakresu <musi zawierać co najmniej jedną <uwzględnić> element podrzędny obecny i zero lub więcej <wykluczać elementy>. Lokalizacje można określić jako ścieżkę (obsługiwane są zmienne środowiskowe) lub jako znany identyfikator folderu. Ponadto można określić, że każda z tych lokalizacji ma być przeszukiwana głęboko lub płytkia, ustawiając wartość inną niż "true" lub "false" (wartość domyślna to rekursywna). Części dołączonej listy lokalizacji można wykluczyć, określając elementy wykluczania.

Poniżej przedstawiono <zakres> element, który będzie przeszukiwać folder specjalny dokumentów, ale nie jego elementy podrzędne, wolumin "E:" i jego elementy podrzędne, ale nie katalog "E:\windows" lub dowolny z jego elementów podrzędnych:

...
    <query>
        ...
        <scope>
            <include knownFolder="{FDD39AD0-238F-46AF-ADB4-6C85480369C7}" nonRecursive="true"/>
            <include path="E:\"/>
            <exclude path="E:\Windows" nonRecursive="false"/>
        </scope>
        ...
    </query>
...

<kindList, element>

Te elementy definiują związek "rodzaju" elementów, które powinny być wyświetlane w bibliotece. Prawidłowe wartości to:

  • kalendarz
  • komunikacja
  • kontakt
  • dokument
  • E-mail
  • karmić
  • folder
  • gra
  • instantmessage
  • dziennik
  • łącze
  • film
  • muzyka
  • nuta
  • obraz
  • program
  • recordedtv
  • folder wyszukiwania
  • zadanie
  • wideo
  • webhistory
  • przedmiot
  • inny

<warunków>, element

Warunki to filtry, względem których są porównywane wyniki wyszukiwania. Można na przykład filtrować wyniki spełniające określone kryteria, takie jak nazwa autora lub rozmiar pliku. Zestaw warunków jest wbudowany w pojedyncze drzewo warunków z gałęziami logicznymi AND, OR i NOT.

Poniższy przykład przedstawia strukturę warunku <> elementu.

...
    <query>
        ...
        <conditions>
            <condition type="" ...>
                <attributes>
                    <attribute attributeID="" .../>
                </attributes>
            </condition>
        </conditions>
    </query>
...

Typ warunku może być jednym z następujących elementów:

Typ Opis Dostępne atrybuty
andCondition Połączenie dwóch lub większej liczby warunków podrzędnych N/a
orCondition Odejmowanie dwóch kolejnych warunków podrzędnych N/a
notCondition Negacja warunku podrzędnego N/a
leafCondition Porównuje właściwość z wartością property, propertyType, operator, value, valuetype

Atrybuty elementu <leafCondition> identyfikują właściwości i wartości, względem których są filtrowane wyniki.

Przykład: <warunków>, element

Poniższy przykład filtruje wyniki dla wszystkich nieprzeczytanych elementów utworzonych przez Johna. Oznacza to, że właściwość System.IsRead ma wartość false, a ciąg "john" pojawia się we właściwościach System.Author lub System.ItemAuthors.

...
    <query>
        ...
        <conditions>

            <condition type="andCondition">

                <condition type="leafCondition"
                           property="System.IsRead"
                           operator="eq"
                           value="FALSE"/>

                <condition type="orCondition">

                    <condition type="leafCondition"
                               property="System.Author"
                               propertyType="string"
                               operator="wordmatch"
                               value="John"
                               valueType="System.StructuredQueryType.String"/>

                    <condition type="leafCondition"
                               property="System.ItemAuthors"
                               propertyType="string"
                               operator="wordmatch"
                               value="John"
                               valueType="System.StructuredQueryType.String"/>

                </condition>

            </condition>

        </conditions>

    </query>
...

<properties>, element

Właściwości <> opisuje właściwości samego zapisanego wyszukiwania. Zapisane pliki wyszukiwania obsługują cztery właściwości: <author>, <kind>, <description>i <tagów>. Są one przeznaczone tylko do użytku wewnętrznego.

Pełna specyfikacja formatu pliku search-ms

Poniżej przedstawiono przykład pełnego kodu XML dla zapisanego pliku wyszukiwania.

<?xml version="1.0"?>

<persistedQuery version="1.0">

    <!-- The viewInfo section defines how results are displayed to the end user -->
    <viewInfo viewMode=""       <!-- details | icons | tiles -->
              iconSize=""       <!-- Integer -->
              stackIconSize=""  <!-- Do not use -->
              displayName=""    <!-- Do not use -->
              folderFlags=""    <!-- Do not use -->
              taskFlags=""      <!-- Do not use -->
              autoListFlags=""> <!-- Do not use -->

        <visibleColumns>
            <column viewField=""/>  <!-- System.[propertyname] -->
        </visibleColumns>

        <frequentlyUsedColumns>
            <column viewField= ""/> <!-- Do not use -->
        </frequentlyUsedColumns>

        <columnChooserColumns >
            <column viewField=""/>  <!-- Do not use -->
        </columnChooserColumns >

        <groupBy viewField=""       <!-- System.[propertyname] -->
                 direction=""/>     <!-- ascending | descending -->

        <stackList>
            <stack viewField=""/>   <!-- Do not use -->
        </stackList>

        <sortList>
            <sort viewField=""      <!-- System.[propertyname] -->
                  direction=""/>    <!-- ascending | descending -->
        </sortList>
    </viewInfo>

    <!-- The query section defines what gets searched (locations, file kinds) -->
    <query>
        <providers>
            <provider clsid=""/>          <!-- Do not use -->
        </providers>

        <subQueries>
            <subQuery path=""/>           <!-- Do not use -->
            <subQuery knownSearch=""/>    <!-- Do not use -->
        </subQueries>

        <scope>
            <include path=""        nonRecursive=""/>   <!-- [path of location to include] -->
            <include knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
            <exclude path=""        nonRecursive=""/>   <!-- [path of location to exclude] -->
            <exclude knownFolder="" nonRecursive=""/>   <!-- Known folder ID  -->
        </scope>

        <kindList>
            <kind name=""/>     <!-- Kind value -->
        </kindList>

        <conditions>
            <condition type="" ...>     <!-- andCondition | orCondition | notCondition | leafCondition -->
                <attributes>
                    <attribute attributeID="" .../> <!-- Do not use -->
                </attributes>
            </condition>
        </conditions>
    </query>

    <!-- The properties section identifies properties of the saved search file itself. -->
    <properties>
        ...             <!-- Do not use -->
    </properties>

</persistedQuery>

Przykłady zapisanych wyszukiwań

Poniżej przedstawiono przykłady plików *.search-ms.

Ostatnie dokumenty.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <sortList>
            <sort viewField="System.DateModified" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUZZXD-30NU" propertyType="wstr" />
        </conditions>
        <kindList>
            <kind name="Document"/>
        </kindList>
        <subQueries>
            <subQuery knownSearch="{4f800859-0bd6-4e63-bbdc-38d3b616ca48}"/>
        </subQueries>
    </query>
</persistedQuery>

Ostatnie pliki Music.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <sortList>
            <sort viewField="System.DateModified" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="leafCondition" valuetype="System.StructuredQueryType.DateTime" property="System.DateModified" operator="imp" value="R00UUUUUUUUW-1WNNU" propertyType="wstr"/>
        </conditions>
        <kindList>
            <kind name="Music"/>
        </kindList>
        <subQueries>
            <subQuery knownSearch="{4f800859-0bd6-4e63-bbdc-38d3b616ca48}"/>
        </subQueries>
    </query>
</persistedQuery>

Ostatnio udostępnione przez Me.search-ms

<?xml version="1.0"?>
<persistedQuery version="1.0">
    <viewInfo viewMode="details" iconSize="16">
        <visibleColumns>
            <column viewField="System.ItemNameDisplay"/>
            <column viewField="System.DateModified"/>
            <column viewField="System.Keywords"/>
            <column viewField="System.SharedWith"/>
            <column viewField="System.ItemFolderPathDisplayNarrow"/>
        </visibleColumns>
        <frequentlyUsedColumns>
            <column viewField="System.Author"/>
            <column viewField="System.Kind"/>
            <column viewField="System.Size"/>
            <column viewField="System.Title"/>
            <column viewField="System.Rating"/>
        </frequentlyUsedColumns>
        <sortList>
            <sort viewField="System.SharedWith" direction="descending"/>
        </sortList>
    </viewInfo>

    <query>
        <conditions>
            <condition type="andCondition">
                <condition type="leafCondition" property="System.IsShared" operator="eq" value="true"/>
                <condition type="leafCondition" property="System.FileOwner" operator="eq" value="[Me]"/>
            </condition>
        </conditions>
        <kindList>
            <kind name="item"/>
        </kindList>
        <scope>
            <include knownFolder="{5E6C858F-0E22-4760-9AFE-EA3317B67173}"/>
            <include knownFolder="{DFDF76A2-C82A-4D63-906A-5644AC457385}"/>
        </scope>
    </query>
</persistedQuery>