Zadání vzdálenosti klíčových slov
Dotaz: Jak přesně vyhledává operátor vzdálenosti/blízkosti - "~" ?
Odpověď:
Operátor ~ v Elasticsearch může znamenat dvě různé věci, podle toho, kde ho použijete.
1) ~ u fráze v uvozovkách = blízkost slov (tzv. slop)
Pokud zadáte více slov v uvozovkách, např.:
"partners capital"~1
pak ~1 neznamená editační vzdálenost, ale tzv. slop – tedy kolik „posunů“ mezi slovy Elasticsearch dovolí.
Co to prakticky znamená:
~0→ slova musí být hned vedle sebe ve stejném pořadí~1→ slova mohou být téměř vedle sebe, např. s jedním dalším slovem mezi nimi
Důležité:
Slop běžně neumožňuje snadno obrátit pořadí slov. Prohození pořadí (např. capital partners místo partners capital) obvykle vyžaduje vyšší hodnotu (často ~2).
Krátké příklady (fráze):
Dotaz:
"partners capital"~0
✅ najde:partners capital
❌ nenajde:partners global capital
❌ nenajde:capital partnersDotaz:
"partners capital"~1
✅ najde:partners capital
✅ najde:partners global capital(1 slovo mezi)
❌ nenajde:capital partnersDotaz:
"partners capital"~2
✅ najde:partners capital
✅ najde:partners global capital
✅ typicky najde:capital partners(obrácené pořadí)
2) ~ u jednoho slova bez uvozovek = tolerování překlepů (tzv. fuzzy / editační vzdálenost)
Pokud použijete ~ u jednoho slova bez uvozovek, např.:
partner~1
pak jde o fuzzy vyhledávání a ~1 znamená editační vzdálenost (Levenshtein) – tedy toleranci překlepů.
Editační vzdálenost určuje, kolik úprav je potřeba k přeměně jednoho slova na druhé. Mezi typické úpravy patří:
vložení znaku (insertion)
smazání znaku (deletion)
záměna znaku (substitution)
Krátké příklady (fuzzy):
Dotaz:
partner~1
✅ může najít:partner,partners(záleží na analyzéru)
✅ může najít i překlep:parnter(1 chyba)
❌ typicky nenajde:partnership(příliš velký rozdíl)
Shrnutí
"víceslovná fráze"~N→ blízkost slov (slop), nejde o překlepyslovo~N→ tolerance překlepů (fuzzy / Levenshtein)Pokud potřebujete „dvě slova v libovolném pořadí, ale hned vedle sebe“, je potřeba dotaz řešit jinak (např. vyhledat obě pořadí frází).
