14 - Sorting results, pagination, highlighting

 

Ve výchozím stavu jsou výsledky vyhledávání řazeny podle jejich skóre. Skóre (_score) je desetinné číslo, které nám říká, jak nalezený dokument odpovídá vyhledávacímu dotazu. Skóre záleží na "term frequency" a "inverse document frequency".

 

Term frequency

Frekvence vyhledávaného termu v dokumentu ovlivňuje výsledné skóre:

Když vyhledáme Black:

Nejvyšší skóre bude mít dokument, který obsahuje slovo Black třikrát:

 

Inverse document frequency

Dále je důležité, jak unikátní je term v rámci indexu. Méně unikátní term znamená menší skóre. Když vyhledáme výraz Black White v následujících dokumentech:

Nejvyšší skóre bude mít dokument obsahující unikátní term White:

 

Field length normalization

Čím vyšší procento termů v dokumentu odpovídá vyhledávacímu dotazu, tím vyšší bude skóre:

 

Coordination

Více termů nalezených v dokumentu znamená opět vyšší skóre:

 

Custom sorting

Pokud chcete řadit výsledky podle jiného pole, než podle výsledného skóre, je to možné určit pomocí parametru sort:

 

Boostování konkrétních polí v multi_match query

V případě multi_match query je možné určit pomocí znaku ^ které pole mají vyšší (nebo naopak nižší) prioritu než ostatní:

 

Kombinování skóre a popularity

V některých případech chceme mírně upravit pořadí výsledků, které jsou jinak řazeny dle skóre. V případě produktů by to mohla být prodejnost, nebo například marže. Při vyhledávání na webu obdobným způsobem do pořadí výsledků vstupuje page rank.

Toho lze dosáhnout pomocí rank_score query (v kombinaci s datovým typem rank_features):

Případně pro vyšší flexibilitu lze použít script_score:

 

Stránkování

Stránkovat výsledky lze pomocí parametrů from a size. výchozí hodnota pro size je 10.

Limit při stránkování je nastaven na 10 000 výsledků. Změnit jej lze v nastavení Elasticsearch pod index.max_result_window. Pokud ale potřebujete projít opravdu velké množství dat, doporučuji spíše použít search_after (docs).

 

Zvýrazňování

Jak můžete vidět v Discover v Kibaně, nalezené výsledky mohou používat zvýrazňování.

To lze uvést na nejvyšší úrovni query pod klíčem highlight. Je možné určit, čím přesně bude zvýraznění probíhat (typicky HTML tagy):

Dev_Tools_-_Elastic-5386332

 

Úkol: sorting, pagination, and highlighting

  1. Uložte následující dokumenty do Elasticsearch:

  2. Vyhledejte Dog, přičemž:

    1. Seřaďte výsledky podle data publish, od nejstarších k nejnovějším
    2. Pokud mají dva dokumenty shodné datum, seřaďte je abecedně
  3. Zvýrazněte shodu pomocí HTML tagu <b></b>