Hledání slov blízko jiného slova pomocí funkce NEAR
platí pro:SQL Server
Azure SQL Database
azure SQL Managed Instance
Můžete použít výraz proximityNEAR v predikátu CONTAINS nebo ve funkci CONTAINSTABLE k hledání slov nebo frází blízko sebe.
Přehled funkce NEAR
NEAR má následující funkce:
Můžete zadat maximální počet nehledaných termínů, které oddělují první a poslední hledané termíny.
Slova nebo fráze můžete hledat v libovolném pořadí nebo můžete hledat slova a fráze v určitém pořadí.
Můžete zadat maximální počet nehledaných termínů nebo maximální vzdálenost, která odděluje první a poslední hledané termíny, aby představovaly shodu.
Pokud zadáte maximální počet termínů, můžete určit, že shody musí obsahovat hledané termíny v zadaném pořadí.
Aby byl považován za shodu, musí řetězec textu:
Začněte jedním ze zadaných hledaných termínů a končíte jedním z ostatních zadaných hledaných termínů.
Obsahují všechny zadané hledané termíny.
Počet nehledaných termínů, včetně stoperů, ke kterým dochází mezi prvním a posledním hledaný termínem, musí být menší nebo roven maximální vzdálenosti, pokud je zadána maximální vzdálenost.
Syntaxe funkce NEAR
Základní syntaxe NEAR je:
NEAR (
{
*search_term* [ ,...*n* ]
|
(*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
Další informace o syntaxi viz CONTAINS (Transact-SQL).
Příklady
Příklad 1
Můžete například vyhledat "John" ve dvou termínech "Smith", a to takto:
... CONTAINS(column_name, 'NEAR((John, Smith), 2)')
Mezi příklady řetězců, které odpovídají, patří "John Jacob Smith
" a "Smith, John
". Řetězec "John Jones knows Fred Smith
" obsahuje tři zasahující nepodstatné termíny pro vyhledávání, takže se nejedná o shodu.
Chcete-li vyžadovat, aby termíny byly nalezeny v zadaném pořadí, změňte příklad termínu blízkosti na NEAR((John, Smith),2, TRUE).
Tento výraz vyhledá "John
" ve dvou termínech "Smith
", ale pouze v případě, že "John
" předchází "Smith
". V jazyce, který čte zleva doprava, například z angličtiny, příklad řetězce, který odpovídá, je "John Jacob Smith
".
Všimněte si, že pro jazyk, který čte zprava doleva, jako je arabština nebo hebrejština, použije modul Full-Text zadané výrazy v obráceném pořadí. Průzkumník objektů v aplikaci SQL Server Management Studio také automaticky obrátí pořadí zobrazení slov zadaných v jazycích se zprava doleva.
Příklad 2
Následující příklad prohledává tabulku Production.Document
ukázkové databáze AdventureWorks
a hledá všechny souhrny dokumentů, které obsahují slovo "reflektor" ve stejném dokumentu jako slovo "držák".
SELECT DocumentNode, Title, DocumentSummary
FROM Production.Document AS DocTable
INNER JOIN CONTAINSTABLE(Production.Document, Document,
'NEAR(bracket, reflector)' ) AS KEY_TBL
ON DocTable.DocumentNode = KEY_TBL.[KEY]
WHERE KEY_TBL.RANK > 50
ORDER BY KEY_TBL.RANK DESC;
GO
Měření maximální vzdálenosti
Konkrétní maximální vzdálenost, například 10 nebo 25, určuje, kolik nehledaných termínů, včetně stoperů, může nastat mezi prvním a posledním hledaném termínem v daném řetězci. Například NEAR((dogs, cats, "hunting mice"), 3)
vrátí následující řádek, ve kterém je celkový počet nehledaných termínů tři ("enjoy
", "but
" a "avoid
"):
"Cats
enjoy
hunting mice``, but avoid
dogs``.
"
Stejný termín blízkosti by nevrátil následující řádek, protože maximální vzdálenost je překročena čtyřmi nehledanými termíny ("enjoy
", "but
", "usually
" a "avoid
"):
"Cats
enjoy
hunting mice``, but usually avoid
dogs``.
"
Kombinování funkce NEAR s jinými termíny
Funkce NEAR můžete kombinovat s některými dalšími termíny. Funkci AND (&), OR (|) nebo AND NOT (&!) můžete použít ke kombinování vlastního termínu blízkosti s jiným vlastním termínem blízkosti, jednoduchým termínem nebo termínem předpony. Například:
CONTAINS('NEAR((termín1, termín2),5) AND termín3')
CONTAINS('NEAR((termín1, termín2);5) NEBO termín3')
CONTAINS('NEAR((termín1, termín2);5) A NE termín3')
CONTAINS('NEAR((termín1; termín2);5) AND NEAR((termín3, termín4);2)')
CONTAINS('NEAR((termín1; termín2);5) OR NEAR((termín3, termín4);2; PRAVDA)')
Například
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
Funkci NEAR nelze kombinovat s termínem týkajícím se generace (ISABOUT ...) ani s termínem vážení (FORMSOF ...).
Další informace o blízkostním vyhledávání
Překrývající se výskyty hledaných termínů
Všechna vyhledávání v blízkosti vždy hledají pouze nesouvisející výskyty. Překrývající se výskyty hledaných termínů se nikdy nekvalifikují jako shody. Představte si například následující termín blízkosti, který v tomto pořadí hledá "
A
" a "AA
" s maximální vzdáleností dvou termínů:CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
Možné shody jsou „
AAA
“, „A.AA
“ a „A..AA
“. Řádky obsahující pouze "AA
" by se neshodovaly.Poznámka
Můžete zadat termíny, které se překrývají, například
NEAR("mountain bike", "bike trails")
nebo(NEAR(comfort*, comfortable), 5)
. Určení překrývajících se termínů zvyšuje složitost dotazu zvýšením možných permutací shody. Pokud zadáte velký počet takových překrývajících se termínů, může dotaz narazit na prostředky a nezdaří se. Pokud k tomu dojde, zjednodušte dotaz a zkuste to znovu.FUNKCE NEAR (bez ohledu na to, zda je zadána maximální vzdálenost) označuje logickou vzdálenost mezi termíny, nikoli absolutní vzdálenost mezi nimi. Například termíny v různých frázích nebo větách v odstavci jsou považovány za vzdálenější než termíny ve stejné frázi nebo větě bez ohledu na jejich skutečnou blízkost, za předpokladu, že jsou méně související. Podobně se pojmy v různých odstavcích považují za ještě dál od sebe. Pokud shoda přesahuje konec věty, odstavce nebo kapitoly, zvýší se mezera použitá pro řazení dokumentu o 8, 128 nebo 1024.
Dopad termínů blízkosti na řazení podle funkce CONTAINSTABLE
Pokud funkce CONTAINSTABLE použije funkci NEAR, počet přístupů v dokumentu vzhledem k jeho délce a vzdálenost mezi prvními a posledními hledanémi termíny v každém z přístupů ovlivní pořadí jednotlivých dokumentů. Pokud jsou odpovídající hledané termíny >50 logických termínů od sebe, pořadí vrácené v dokumentu je 0. U vlastního termínu blízkosti, který neurčuje celé číslo jako maximální vzdálenost, dokument, který obsahuje pouze hity s mezerou >odpovídající 100 logickým termínům, získá hodnocení 0. Další informace o řazení vlastních hledání podle vzdálenosti naleznete v části Omezit výsledky hledání pomocí RANK.
Možnost serveru upravit šumová slova
Hodnota transformace šumových slov ovlivňuje způsob, jakým SQL Server zpracovává zastavovací slova, pokud jsou zadána v blízkostních vyhledáváních. Další informace naleznete v tématu transformace šumových slov možnost konfigurace serveru.
Viz také
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
dotaz pomocí hledání Full-Text