Delen via


Zoeken naar woorden dicht bij een ander woord met NEAR

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

U kunt de nabijheidstermNEAR in een CONTAINS predicaat of CONTAINSTABLE functie gebruiken om te zoeken naar woorden of zinsdelen die dicht bij elkaar staan.

Overzicht van NEAR

NEAR heeft de volgende functies:

  • U kunt het maximum aantal niet-zoektermen opgeven dat de eerste en laatste zoektermen scheidt.

  • U kunt zoeken naar woorden of woordgroepen in elke volgorde, of u kunt zoeken naar woorden en woordgroepen in een specifieke volgorde.

  • U kunt het maximum aantal niet-zoektermen opgeven, of de maximale afstand, die de eerste en laatste zoektermen scheidt zodat er een overeenkomst ontstaat.

  • Als u het maximum aantal termen opgeeft, kunt u ook opgeven dat overeenkomsten de zoektermen in de opgegeven volgorde moeten bevatten.

Om te kwalificeren als een match, moet een tekstreeks aan de volgende criteria voldoen:

  • Begin met een van de opgegeven zoektermen en eindig met de andere opgegeven zoektermen.

  • Alle opgegeven zoektermen bevatten.

  • Het aantal niet-zoektermen, inclusief stopwoorden, dat voorkomt tussen de eerste en laatste zoekterm, moet kleiner zijn dan of gelijk zijn aan de maximumafstand, als de maximumafstand is opgegeven.

Syntaxis van NEAR

De basissyntaxis van NEAR is:

 NEAR (  
  
 {  
  
 *search_term* [ ,...*n* ]  
  
 |  
  
 (*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]  
  
 }  
  
 )  

Zie CONTAINS (Transact-SQL)voor meer informatie over de syntaxis.

Voorbeelden

Voorbeeld 1

U kunt bijvoorbeeld als volgt zoeken naar 'John' binnen twee termen van 'Smith':

... CONTAINS(column_name, 'NEAR((John, Smith), 2)')

Enkele voorbeelden van tekenreeksen die overeenkomen, zijn 'John Jacob Smith' en 'Smith, John'. De tekenreeks "John Jones knows Fred Smith" bevat drie tussenliggende niet-zoektermen, dus komt het niet overeen.

Als u wilt vereisen dat de termen in de opgegeven volgorde worden gevonden, wijzigt u de nabijheidsterm van het voorbeeld in NEAR((John, Smith),2, TRUE). Hiermee wordt gezocht naar 'John' binnen twee termen 'Smith' maar alleen wanneer 'John' voorafgaat aan 'Smith'. In een taal die van links naar rechts leest, zoals Engels, is een voorbeeld van een tekenreeks die overeenkomt met 'John Jacob Smith'.

Houd er rekening mee dat voor een taal die van rechts naar links leest, zoals Arabisch of Hebreeuws, de Full-Text Engine de opgegeven termen in omgekeerde volgorde toepast. Ook keert Objectverkenner in SQL Server Management Studio automatisch de weergavevolgorde van woorden om die zijn opgegeven in recht-naar-links talen.

Voorbeeld 2

In het volgende voorbeeld wordt in de Production.Document tabel van de AdventureWorks voorbeelddatabase gezocht naar alle documentsamenvattingen die het woord 'reflector' in hetzelfde document bevatten als het woord 'haak'.

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  

Hoe de maximale afstand wordt gemeten

Een specifieke maximale afstand, zoals 10 of 25, bepaalt hoeveel niet-zoektermen, inclusief stopwoorden, tussen de eerste en laatste zoektermen in een bepaalde tekenreeks kunnen optreden. Bijvoorbeeld, NEAR((dogs, cats, "hunting mice"), 3) retourneert de volgende rij, waarin het totale aantal niet-zoektermen drie is ("enjoy", "but" en "avoid").

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

Dezelfde nabijheidsterm retourneert niet de volgende rij, omdat de maximumafstand wordt overschreden door de vier niet-zoektermen ("enjoy", "but", "usually" en "avoid"):

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

NEAR combineren met andere termen

U kunt NEAR combineren met enkele andere termen. U kunt AND (&), OR (|) of AND NOT (&!) gebruiken om een aangepaste nabijheidsterm te combineren met een andere aangepaste nabijheidsterm, een eenvoudige term of een voorvoegselterm. Bijvoorbeeld:

  • CONTAINS('NEAR((term1, term2),5) AND term3')

  • CONTAINS('NEAR((term1, term2),5) OF term3')

  • CONTAINS('NEAR((term1, term2),5) EN NIET term3')

  • CONTAINS('NEAR((term1, term2),5) AND NEAR((term3, term4),2)')

  • CONTAINS('NEAR((term1, term2),5) OR NEAR((term3, term4),2, WAAR)')

Bijvoorbeeld

CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')  

U kunt NEAR niet combineren met een generatieterm (ISABOUT ...) of een gewogen term (FORMSOF ...).

Meer informatie over nabijheidszoekopdrachten

  • Overlappende voorkomen van zoektermen

    Alle nabijheidszoekopdrachten zoeken altijd naar niet-overlappende voorkomens. Overlappende voorkomens van zoektermen komen nooit in aanmerking als overeenkomst. Denk bijvoorbeeld aan de volgende nabijheidsterm, waarmee wordt gezocht naar 'A' en 'AA' in deze volgorde met een maximumafstand van twee termen:

    CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
    

    De mogelijke overeenkomsten zijn "AAA", "A.AA" en "A..AA". Rijen die alleen 'AA' bevatten, komen niet overeen.

    Notitie

    U kunt termen opgeven die elkaar overlappen, bijvoorbeeld NEAR("mountain bike", "bike trails") of (NEAR(comfort*, comfortable), 5). Als u overlappende termen opgeeft, wordt de complexiteit van de query verhoogd door het aantal mogelijke permutaties te vergroten. Als u een groot aantal van dergelijke overlappende termen opgeeft, kan de query geen resources meer hebben en mislukken. Als dit gebeurt, vereenvoudigt u de query en probeert u het opnieuw.

  • NEAR (ongeacht of er een maximale afstand is opgegeven) geeft de logische afstand tussen termen aan in plaats van de absolute afstand ertussen. Termen binnen verschillende woordgroepen of zinnen binnen een alinea worden bijvoorbeeld verder van elkaar behandeld dan termen in dezelfde zin of zin, ongeacht hun werkelijke nabijheid, op basis van de aanname dat ze minder verwant zijn. Op dezelfde manier worden termen in verschillende alinea's beschouwd als nog verder van elkaar. Als een overeenkomst het einde van een zin, alinea of hoofdstuk omvat, wordt de kloof voor het rangschikken van een document respectievelijk verhoogd met 8, 128 of 1024.

  • Impact van nabijheidsvoorwaarden op classificatie door de functie CONTAINSTABLE

    Wanneer NEAR wordt gebruikt in de functie CONTAINSTABLE, is het aantal treffers in een document ten opzichte van de lengte en de afstand tussen de eerste en laatste zoektermen in elk van de treffers van invloed op de rangschikking van elk document. Als voor een algemene nabijheidsterm de overeenkomende zoektermen >50 logische termen uit elkaar staan, is de rang die wordt geretourneerd in een document 0. Voor een aangepaste nabijheidsterm die geen geheel getal als maximale afstand opgeeft, ontvangt een document dat alleen treffers bevat waarvan de kloof >100 logische termen een rangschikking van 0 krijgt. Zie Zoekresultaten beperken met RANKvoor meer informatie over rangschikking van aangepaste nabijheidszoekopdrachten.

  • De serveroptie voor het transformeren van ruiswoorden

    De waarde van voor het transformeren van ruiswoorden heeft invloed op de manier waarop SQL Server stopwoorden behandelt als deze zijn opgegeven in nabijheidszoekopdrachten. Zie voor meer informatie ruis woorden serverconfiguratieoptietransformeren.

Zie ook

BEVAT (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
query uitvoeren met Full-Text