Uporządkuj schemat, aby optymalnie interpretować zapytania

Funkcja interpretacji zapytań w Cloud Search automatycznie interpretuje operatory i filtry w zapytaniu użytkownika oraz przekształca te elementy w uporządkowane zapytanie oparte na operatorach. Interpretacja zapytania wykorzystuje operatory zdefiniowane w schemacie wraz z zindeksowanymi dokumentami, aby wywnioskować, co oznacza zapytanie użytkownika. Ta funkcja umożliwia użytkownikowi wyszukiwanie przy użyciu minimalnej liczby słów kluczowych, a mimo to uzyskiwanie precyzyjnych wyników.

Rzeczywiste wyniki wyświetlane użytkownikowi zależą od pewności interpretacji zapytania. Wartość ta zależy od kilku czynników, m.in. od tego, gdzie w zindeksowanych dokumentach pojawiają się ciągi zapytania. Ciąg znaków, np. imię i nazwisko aktora „Tom Hanks”, pojawiający się konsekwentnie w polu schematu o nazwie actors, zwiększa ufność. Ten sam ciąg znaków („Tom Hanks”) występujący w akapitach, a nie w polu schematu, może skutkować niższym poziomem ufności. W przypadku wysokiego poziomu ufności użytkownikowi wyświetlane są tylko wyniki interpretacji zapytania. W przypadku mniejszej pewności wyniki interpretacji zapytania są łączone ze zwykłymi wynikami wyszukiwania słów kluczowych.

Przykładowa interpretacja zapytania

Załóżmy, że masz źródło danych, np. bazę danych, zawierające informacje o filmach. Na ilustracji 1 widać przykładowe zapytanie i jego interpretację.

Omówienie interpretacji zapytań
Rysunek 1. Interpretacja zapytania

W tym przykładzie interpretacja zapytania:

  • Analizuje schemat i ustala, że obiekty najwyższego poziomu w źródle danych są klasyfikowane jako objecttype:movies. Interpretacja zapytania wie teraz, że „filmy” w zapytaniu to typ obiektu.

  • Skanuje dokumenty w źródle danych w połączeniu ze schematem, aby określić, gdzie występuje ciąg znaków „action”. Jeśli ciąg znaków występuje głównie w określonym polu źródła danych „gatunek”, interpretacja zapytania ma pewność, że „akcja” jest wartością właściwości „gatunek” zdefiniowanej w schemacie. Jeśli ciąg znaków występuje głównie w kontekście akapitów treści, poziom ufności interpretacji zapytania maleje.

Interpretacja zapytania:

  actor:tom hanks genre:action objecttype:movies

Interpretacja zapytań jest automatycznie włączona u wszystkich klientów Cloud Search bez konieczności wykonywania dodatkowych czynności. Aby jednak uzyskać optymalną interpretację zapytań, należy skonstruować schemat zgodnie z instrukcjami podanymi w tym dokumencie.

Strukturyzowanie schematu pod kątem interpretacji zapytań

Zadbaj o odpowiednią strukturę schematu, aby móc korzystać z interpretacji zapytań.

Włączanie interpretacji wyświetlanej nazwy

Interpretacja zapytań w Cloud Search wykorzystuje objectDefinitions i propertyDefinitions w schemacie, aby interpretować zapytania użytkowników i dostosowywać wyniki. Aby w pełni wykorzystać te elementy schematu, utwórz intuicyjne nazwy wyświetlane, używając displayLabel w przypadku nazw właściwości, objectDisplayLabel w przypadku nazw obiektów i operatorName w przypadku operatorów.

Poniższy schemat przedstawia intuicyjne nazwy wyświetlane obiektu filmu:

{
  "objectDefinitions": [
    {
      "name": "movie",
        "options": {
          "displayOptions": {
          "objectDisplayLabel": "Films"
        }
        ...
      },
      "propertyDefinitions": [
        {
          "name": "genre",
          "isReturnable": true,
          "isRepeatable": true,
          "isFacetable": true,
          "textPropertyOptions": {
          "retrievalImportance": { "importance": "HIGHEST" },
          "operatorOptions": {
            "operatorName": "genre"
          }
        },
        "displayOptions": {
          "displayLabel": "Category"
        }
      },
      ...
      ]
    }
  ]
}

W poprzednim przykładzie:

  • Definicja obiektu filmu zawiera element „Film” objectDisplayLabel.

  • Definicja właściwości gatunku ma operatorName „gatunek” i displayLabel „kategoria”.

Te wyświetlane nazwy umożliwiają Cloud Search interpretowanie zapytań w ten sposób:

  • „filmy akcji”, „filmy akcji gatunku” lub „filmy gatunku akcji” są interpretowane jako genre:action object:movies.
  • „filmy z gatunku akcji lub thriller” jest interpretowane jako objecttype:movies genre:(action OR thriller).
  • „film akcji” lub „filmy akcji” jest interpretowane jako genre:action objecttype:movies.
  • „filmy z kategorii komedie” jest interpretowane jako genre:comedy objecttype:movies.

Włączanie interpretacji dat, liczb i sortowania

W przypadku wszystkich właściwości daty i wartości liczbowych należy zdefiniować typy lessThanOperatorNamegreaterThanOperatorName określone w sekcji IntegerOperatorOptions. Te ustawienia umożliwiają automatyczne interpretowanie dat i liczb. Aby włączyć interpretacje sortowania, ustaw opcję isSortable dla właściwości daty i wartości liczbowych. Poniższy schemat pokazuje, jak włączyć te opcje.

{
  "objectDefinitions": [
    {
      "options": {
        "displayOptions": {
          "objectDisplayLabel": "Films"
        }
      },
      "propertyDefinitions": [
        {
          "name": "runtime",
          "isReturnable": true,
          "isSortable": true,
          "integerPropertyOptions": {
            "orderedRanking": "DESCENDING",
            "minimumValue": {
              "value": 10
            },
            "maximumValue": {
              "value": 500
            },
            "operatorOptions": {
              "operatorName": "runtime",
              "lessThanOperatorName": "runtimelessthan",
              "greaterThanOperatorName": "runtimegreaterthan"
            }
          },
          "displayOptions": {
            "displayLabel": "Length"
          }
        },
        {
          "name": "releasedate",
          "isReturnable": true,
          "isSortable": true,
          "datePropertyOptions": {
            "operatorOptions": {
              "operatorName": "releasedate",
              "lessThanOperatorName": "releasedbefore",
              "greaterThanOperatorName": "releasedafter"
            }
          }
        }
      ]
    }
  ]
}

W poprzednim przykładzie:

  • Właściwość numeryczna runtime odnosi się do długości filmu. W tej usłudze ustawiono wartości runtimelessthan i runtimegreaterthan.
  • Właściwość daty releaseDate odnosi się do daty premiery filmu w kinach. Właściwości releasedbefore i releasedafter są ustawione dla tej usługi.

Te ustawienia umożliwiają Cloud Search interpretowanie zapytań w ten sposób:

  • Zakładając, że jest rok 2019, zapytanie „filmy wydane w tym roku” jest interpretowane jako objecttype: movies releasedafter:2019-1-1 releasedbefore:2019-12-31.
  • Jeśli tydzień to trzeci tydzień marca, „filmy wydane w zeszłym tygodniu” są interpretowane jako objecttype: movies releasedafter:2019-3-10 releasedbefore:2019-3-16
  • „filmy trwające mniej niż 90 minut” jest interpretowane jako objjecttype: movies runtimelessthan:90.
  • Zakładając, że jest rok 2019, zapytanie „filmy wydane w tym roku i długość powyżej 120” jest interpretowane jako releasedafter:2019-1-1 releasedbefore:2019-12-31 objecttype:movies runtimegreaterthan:120.
  • „sortuj filmy według daty premiery” spowoduje filtrowanie według „objecttype: movies”, a wyniki będą sortowane według daty premiery w porządku rosnącym.

Włączanie interpretacji operatorów zarezerwowanych

Możesz też używać zarezerwowanych wbudowanych operatorów type, before, after, objecttype, aby ulepszyć interpretację zapytań. Podczas indeksowania dokumentu wykonaj te czynności:

  1. Wypełnij pole updateTime w sekcji ItemMetadata, aby używać operatorów beforeafter. Te ustawienia umożliwiają Cloud Search interpretowanie zapytań w ten sposób:

    • „filmy z zeszłego tygodnia” wyświetli wszystkie filmy, które zostały zaktualizowane w indeksie w poprzednim tygodniu.
    • „movies before jan 2019” (filmy przed styczniem 2019 r.) wyświetli wszystkie filmy, które zostały zindeksowane przed styczniem 2019 r.
  2. Wypełnij pole mimeTypeItemMetadata, aby używać automatycznego wykrywania typu. Zapytanie „filmy akcji” spowoduje wyświetlenie wszystkich dokumentów z filmami akcji o typie MIME application/mp4, application/mpeg4, application/x-shockwave-flash, video/ i application/vnd.google-apps.video.

Ograniczenia interpretacji zapytań

Funkcja interpretacji zapytań ma te ograniczenia:

  • Interpretacja zapytań działa tylko w przypadku tych list kontroli dostępu do źródeł danych:
    • Wszystkie dokumenty są publiczne w domenie (każdy użytkownik w domenie ma do nich dostęp).
    • Wszystkie dokumenty są publiczne (każda osoba, która ma dostęp do listy kontroli dostępu źródła danych).
    • Większość dokumentów w źródle danych ma tę samą listę kontroli dostępu (wszystkie dokumenty dziedziczą listę kontroli dostępu z tego samego elementu kontenera) i nie ma zdefiniowanych dodatkowych czytelników.
  • Jeśli wiele operatorów schematu ma tę samą wartość, interpretacja tej wartości na potrzeby intencji operatora w zapytaniu zależy od ogólnego współczynnika ufności zwróconego przez system interpretacji zapytań. Załóżmy na przykład, że w schemacie masz zdefiniowane właściwości priority i severity o tych samych nazwach operatorów. Załóżmy, że oba operatory mogą mieć wartości 0, 1, 2 lub 3. W tym przykładzie „0” w zapytaniu może odnosić się do wartości operatora priority lub severity. Te wartości są niejednoznaczne, a poziom ufności jest niższy.
  • Domyślnie interpretacja zapytań w Cloud Search podczas interpretowania zapytania zmienia wielkość liter w wartościach pól na małe, z wyjątkiem operatorów tekstowych zdefiniowanych z opcjami exactMatchWithOperator.
  • Operator source nie jest obsługiwany w zapytaniach.
  • Zapytania, które łączą terminy oparte na operatorach i terminy w formie tekstu swobodnego, nie są interpretowane. Na przykład zapytanie „p0 priority cases severity:s0” nie będzie obsługiwane, ponieważ „p0 priority cases” to termin tekstowy, a „severity:s0” to termin oparty na operatorze.
  • Strategia interpretacji zapytań zawsze łączy zinterpretowane wyniki ze zwykłymi wynikami (niezinterpretowanymi, uporządkowanymi według trafności). Nie zastępuje ona wszystkich wyników na stronie.