Dotazování v Azure Cognitive Search

Azure Cognitive Search nabízí bohatý dotazovací jazyk pro podporu široké škály scénářů, od volného textového vyhledávání až po vysoce specifikované vzory dotazů. Tento článek popisuje požadavky na dotazy a typy dotazů, které můžete vytvořit.

V Cognitive Search dotazu je úplná specifikace operace odezvy s parametry, které informují o provedení dotazu a formování search odpovědi, která se vrací. Parametry a analyzátory určují typ požadavku dotazu. Následující příklad dotazu je bezplatný textový dotaz s logickým operátorem, který používá vyhledávání dokumentů (REST API)a cílí na kolekci dokumentů hotels-sample-index.

POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
    "queryType": "simple",
    "searchMode": "all",
    "search": "restaurant +view",
    "searchFields": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "select": "HotelName, Description, Address/City, Address/StateProvince, Tags",
    "top": "10",
    "count": "true",
    "orderby": "Rating desc"
}

Mezi parametry použité při provádění dotazu patří:

  • queryType nastaví analyzátor, což je buď výchozí jednoduchý analyzátor dotazů (optimální pro fulltextové vyhledávání), nebo úplný analyzátor dotazů Lucene, který se používá pro pokročilé konstruktory dotazů, jako jsou regulární výrazy, vyhledávání bezkontaktní výrazy, vyhledávání přibližných shod a vyhledávání pomocí zástupných znaků.

  • searchMode určuje, jestli jsou shody ve výrazu založené na kritériích "all" nebo "any". Výchozí hodnota je libovolná.

  • search poskytuje kritéria shody, obvykle celé termíny nebo fráze, s operátory nebo bez nich. Jakékoli pole, které je ve schématu indexu s atributem searchable, je kandidátem pro tento parametr.

  • searchFields omezuje provádění dotazů na konkrétní prohledávatelná pole. Během vývoje je užitečné použít stejný seznam polí pro výběr a hledání. V opačném případě může být shoda založená na hodnotách polí, které ve výsledcích nevidíte, což vede k nejistotě ohledně toho, proč byl dokument vrácen.

Parametry použité k tvarování odpovědi:

  • select určuje, která pole se mají v odpovědi vrátit. V příkazu select lze použít pouze pole označená jako zobrazitelná v indexu.

  • top vrátí zadaný počet dokumentů s nejlepší shodou. V tomto příkladu se vrátí pouze 10 přístupů. K zobrazení výsledků můžete použít horní a přeskočit (není zobrazeno).

  • count udává, kolik dokumentů v celém indexu se celkově shoduje, což může být více, než kolik se vrátí.

  • orderby se používá, pokud chcete výsledky seřadit podle hodnoty, jako je hodnocení nebo umístění. V opačném případě se k seřazení výsledků použije výchozí skóre relevance. Pole musí mít atribut seřazený jako kandidát pro tento parametr.

Výše uvedený seznam je reprezentativní, ale ne vyčerpávající. Úplný seznam parametrů v požadavku na dotaz najdete v tématu Hledání dokumentů (REST API).

Typy dotazů

S několika výjimkami dotaz iteruje invertované indexy, které jsou strukturované pro rychlé prohledávání, kde se shoda může najít v jakémkoli poli v rámci libovolného počtu vyhledávacích dokumentů. V Cognitive Search metodologie pro hledání shod je buď fulltextové vyhledávání, nebo filtry, ale můžete také implementovat další dobře známá vyhledávací prostředí, jako je automatické dokončování nebo geografické vyhledávání. Zbývající část tohoto článku shrnuje dotazy v Cognitive Search a obsahuje odkazy na další informace a příklady.

Pokud vaše vyhledávací aplikace obsahuje vyhledávací pole, které shromažďuje vstupy termínů, pak je fulltextové vyhledávání pravděpodobně operací dotazu, která toto prostředí využívá. Fulltextové vyhledávání přijímá termíny nebo fráze předané v search parametru ve všech prohledáovatelných polích v indexu. Volitelné logické operátory v řetězci dotazu mohou zadat kritéria zahrnutí nebo vyloučení. Jednoduchý i úplný analyzátor podporují fulltextové vyhledávání.

V Cognitive Search je fulltextové vyhledávání postaveno na dotazovacím modulu Apache Lucene. Řetězce dotazů v fulltextovém vyhledávání procházejí lexikální analýzou, která zefektivní prohledávání. Analýza zahrnuje malá a malá písmena všech termínů, odebrání stop slov jako "the" a omezení termínů na primitivní kořenové formy. Výchozí analyzátor je Standard Lucene.

Když jsou nalezeny odpovídající termíny, dotazovací modul přehodnotí vyhledávací dokument obsahující shodu pomocí klíče dokumentu nebo ID k sestavení hodnot polí, seřadí dokumenty podle relevance a vrátí 50 nejlepších (ve výchozím nastavení) v odpovědi nebo jiné číslo, pokud jste zadali top .

Pokud provádíte implementaci fulltextového vyhledávání, pochopení způsobu tokenizace obsahu vám pomůže ladit případné anomálie dotazů. Dotazy na pomlčky nebo speciální znaky mohou ovat jiné než výchozí standardní analyzátory Lucene, aby se zajistilo, že index obsahuje správné tokeny. Výchozí hodnoty můžete přepsat pomocí analyzátorů jazyka nebo specializovaných analyzátorů, které upravují lexikální analýzu. Jedním z příkladů je klíčové slovo, které považuje celý obsah pole za jeden token. To je užitečné pro data, jako jsou PSČ, ID a názvy některých produktů. Další informace najdete v tématu Částečné vyhledávání termínů a vzory se speciálními znaky.

Pokud očekáváte vysoké využití logických operátorů, což je pravděpodobnější u indexů obsahujících velké textové bloky (pole obsahu nebo dlouhé popisy), nezapomeňte pomocí parametru otestovat dotazy a vyhodnotit vliv tohoto nastavení na logické searchMode=Any|All vyhledávání.

Automatické dokončování a navrhované dotazy

Automatické dokončování nebo navrhované výsledky jsou alternativou k tomu, aby se v prostředí hledání při psaní shodly následné požadavky dotazů na základě částečných řetězcových search vstupů (po každém znaku). Parametry a můžete používat společně nebo samostatně, jak je popsáno v autocomplete tomto suggestions kurzu,ale nemůžete je použít s search . Dokončené termíny i navrhované dotazy se odvozují z obsahu indexu. Modul nikdy nevrátí řetězec nebo návrh, který v indexu neexistuje. Další informace najdete v tématu Automatické dokončování (REST API) a Návrhy (REST API).

Filtry se běžně používají v aplikacích, které zahrnují Cognitive Search. Na stránkách aplikace jsou filtry často vizualizovány jako vlastnosti ve strukturách navigace v odkazech pro filtrování řízené uživatelem. Filtry se také používají interně k vystavení řezů indexového obsahu. Vyhledávací stránku můžete například inicializovat pomocí filtru pro produktovou kategorii nebo jazyka, pokud index obsahuje pole v angličtině i francouzštině.

Můžete také potřebovat filtry pro vyvolání specializovaného formuláře dotazu, jak je popsáno v následující tabulce. Můžete použít filtr s neurčenou hledanou vlastností ( ) nebo s řetězcem dotazu, který obsahuje search=* výrazy, fráze, operátory a vzory.

Scénář filtrování Description
Filtry rozsahu V Azure Cognitive Search se dotazy na rozsah se sestaví pomocí parametru filtru. Další informace a příklady najdete v příkladu filtru rozsahů.
Vyhledávání geografické polohy Pokud je prohledáovatelné pole typu Edm.GeographyPoint,můžete vytvořit výraz filtru pro ovládací prvky hledání "najít poblíž" nebo hledání na základě mapy. Pole, která řídí geografické vyhledávání, obsahují souřadnice. Další informace a příklad najdete v příkladu geografické vyhledávání.
Fasetová navigace V případě faceted navigation tree mohou uživatelé vybrat facets (facets) a zúžit výsledky na každé kliknutí. Každá vlastnost je zálohovaná filtrem, který vyloučí dokumenty, které už neodpovídají kritériím.

Poznámka

Text, který se používá ve výrazu filtru, se během zpracování dotazu neanalyzuje. Textové zadání se předpokládá jako doslovný znak rozlišující velká a malá písmena, který je úspěšný nebo neúspěšný při porovnávání. Výrazy filtru jsou vytvořeny pomocí syntaxe OData a předány v parametru ve filter všech filtrovatelných polích v indexu. Další informace najdete v tématu Filtry v Azure Cognitive Search.

Vyhledávání dokumentů

Na rozdíl od výše popsaných formulářů dotazů tento dokument načte jeden dokument hledání podle IDbez odpovídajícího vyhledávání nebo prohledávání indexu. Vyžádá se a vrátí jenom jeden dokument. Když uživatel vybere položku ve výsledcích hledání, načtení dokumentu a vyplnění stránky podrobností poli je typická odpověď a hledání v dokumentu je operace, která ji podporuje.

Rozšířené vyhledávání: přibližné výrazy, zástupné znaky, vzdálenost, regulární výraz

Rozšířený formulář dotazu závisí na úplném analyzátoru Lucene a operátorech, které aktivují konkrétní chování dotazů.

Typ dotazu Využití Příklady a další informace
Vyhledávání v polích search Parametr queryType=full Sestavte složený výraz dotazu, který cílí na jedno pole.
Příklad hledání v polích
vyhledávání přibližných shod search Parametr queryType=full Shody u termínů, které mají podobnou konstrukci nebo pravopis.
Příklad vyhledávání přibližných shod
vyhledávání bezkontaktní blízkosti search Parametr queryType=full Najde v dokumentu termíny, které jsou blízko sebe.
Příklad hledání bezkontaktní blízkosti
zlepšování termínů search Parametr queryType=full Seřadí dokument na vyšší úrovni, pokud obsahuje posílený termín, vzhledem k ostatním, kteří ho ne.
Příklad zvýšení termínu
vyhledávání regulárních výrazů search Parametr queryType=full Odpovídá na základě obsahu regulárního výrazu.
Příklad regulárního výrazu
vyhledávání pomocí zástupných znaků nebo předpon search Parametr s * ~ nebo ? , queryType=full Odpovídá na základě předpony a vlnovky ( ~ ) nebo jednoho znaku ( ? ).
Příklad vyhledávání pomocí zástupných znaků

Další kroky

Pokud se chcete blíže podívat na implementaci dotazu, prohlédněte si příklady jednotlivých syntaxí. Pokud s fulltextovým vyhledáváním ještě nevíte, co dotazovací modul dělá, může být stejně dobrou volbou.