Jak funguje hledání

Globální hledání

Portaro provádí hledání stylem “google”, neboli takovým způsobem, že se snaží vyhledat co nejvíce záznamů, seřazených podle relevance. Pro představu - na slovo “ekonomie” vyhledá i záznamy, jenž mají ekonomii někde v poznámce, avšak tyto záznamy budou mnohem níže, než záznam s názvem “ekonomie”. Pokud bychom je pak seřadili podle názvu, dostaneme poněkud neodpovídající výsledky. Řazení je tedy nastavitelné, nicméně to silně nedoporučujeme.

Nastavení globálního hledání (vyhledávací řádek v hlavičce katalogu) je přes ini OPAC_SEARCH.VzorGlobalniHledaniPokus1,2,3, kde každé definuje šablonu pro vyhledávací dotaz. Pokud se v rámci první šablony nenalezne žádný záznam, Portaro zkusí hledat pomocí druhé šablony a následně třetí.

Šablona definuje:

  • Jak se mají do polí rozložit jednotlivá slova z hledaného výrazu. Šablona podporuje dvě funkce:
      1. “whole”, která vezme celý výraz a vloží ho do šablony.
      1. “and”, která rozloží jednotlivá vyhledavaná slova do závorek oddělených operátorem AND.
  • V jakých polích se má hledat
  • S jakou prioritou - záznam obsahující hledaný výraz v názvu bude mít větší prioritu než záznam, který ho má v poznámce. Priorita se určuje znakem stříšky a číslem. Větší číslo značí vyšší prioritu.

Specializovaná hledání - search query

Pro nastavení např. hledání novinek je třeba vytvářet tzv. search query (vyhledávací dotaz), což je JSON formát pro vyhledávací kritéria. Kromě standardních vyhledávacích fieldů lze použít i přímo lucenovské vyhledávací pole, např. P245, nicméně pak query nelze použít při vyhledávání v Z serveru nebo pomocí SQL.

JSON formát je definován například takto:

{
    "and": [
        {
            "field": "name",
            "startsWithWords": {"value": "karel"}
        },
        {
            "field": "fond",
            "in": {"value": [1,3]}
        },
        {
            "or": [
                {
                    "field": "name",
                    "eqWords": {"value": "novák"}
                },
                {
                    "field": "documentYear",
                    "between": {"from": 2000, "to": 2002}
                }
            ]
        }
    ]
}

Příklad bude převeden do lucenu jako (PNAZEV:karel* AND (REZS_FOND:1 OR REZS_FOND:3) AND (PNAZEV:novak OR REZS_ROK:[2000 TO 2002]))

kde:

  • do and a or se vkládají seznamy termů - mezi ně se pak vloží ANDy nebo ORy
  • do field se nastavuje vyhledávací field (viz výše)
  • název druhého (např. startsWithWords) pak představuje tzv. matcher. Možné matchery jsou:
    • eq: přesná hodnota
    • eqWords: rozdělí hodnotu podle jednotlivých slov, ty pak fungují stejně jako eq
    • startsWithWords: rozdělí hodnotu podle jednotlivých slov, ty pak fungují jako “začíná na”
    • in: obsahuje výčet přesných hodnot, například idček fondů
    • between: obsahuje rozsah hodnot, například roků vydání
Top