Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure 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
").
"Cats
enjoy
hunting mice``, but avoid
dogs``.
"
Dezelfde nabijheidsterm retourneert niet de volgende rij, omdat de maximumafstand wordt overschreden door de vier niet-zoektermen ("enjoy
", "but
", "usually
" en "avoid
"):
"Cats
enjoy
hunting mice``, but usually avoid
dogs``.
"
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