Sdílet prostřednictvím


Hledání slov blízko jiného slova pomocí funkce NEAR

platí pro:SQL ServerAzure SQL Databaseazure 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"):

"Catsenjoyhunting mice``, but avoiddogs``."

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"):

"Catsenjoyhunting mice``, but usually avoiddogs``."

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