Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Du kan använda närhetstermenNEAR i en CONTAINS- predikat eller funktionen CONTAINSTABLE för att söka efter ord eller fraser nära varandra.
Översikt över NEAR
NEAR har följande funktioner:
Du kan ange det maximala antalet icke-söktermer som avgränsar de första och sista sökorden.
Du kan söka efter ord eller fraser i valfri ordning eller söka efter ord och fraser i en viss ordning.
Du kan ange det maximala antalet icke-söktermer, eller maximalt avstånd, som avgränsar de första och sista sökorden för att utgöra en matchning.
Om du anger det maximala antalet termer kan du också ange att matchningar måste innehålla söktermer i den angivna ordningen.
För att kvalificera sig som en matchning måste en textsträng:
Börja med ett av de angivna söktermer och avsluta med ett av de andra angivna sökorden.
Innehåller alla angivna söktermer.
Antalet icke-söktermer, inklusive stoppord, som inträffar mellan de första och sista sökorden måste vara mindre än eller lika med det maximala avståndet, om det maximala avståndet anges.
Syntax för NEAR
Den grundläggande syntaxen för NEAR är:
NEAR (
{
*search_term* [ ,...*n* ]
|
(*search_term* [ ,...*n* ] ) [, <maximum_distance> [, <match_order> ] ]
}
)
Mer information om syntaxen finns i CONTAINS (Transact-SQL).
Exempel
Exempel 1
Du kan till exempel söka efter "John" inom två termer i "Smith", enligt följande:
... CONTAINS(column_name, 'NEAR((John, Smith), 2)')
Några exempel på strängar som matchar är "John Jacob Smith
" och "Smith, John
". Strängen "John Jones knows Fred Smith
" innehåller tre mellanliggande icke-söktermer, så det är inte en matchning.
Om du vill kräva att termerna hittas i den angivna ordningen ändrar du exempeltermen närhet till NEAR((John, Smith),2, TRUE).
Detta söker efter "John
" inom två termer av "Smith
" men bara när "John
" föregår "Smith
". På ett språk som läser från vänster till höger, till exempel engelska, är ett exempel på en sträng som matchar "John Jacob Smith
".
Observera att för ett språk som läser från höger till vänster, till exempel arabiska eller hebreiska, tillämpar Full-Text Engine de angivna termerna i omvänd ordning. Object Explorer i SQL Server Management Studio ändrar också automatiskt visningsordningen för ord som anges i höger-till-vänster-språk.
Exempel 2
I följande exempel söker du i tabellen Production.Document
i AdventureWorks
exempeldatabasen efter alla dokumentsammanfattningar som innehåller ordet "reflektor" i samma dokument som ordet "hakparentes".
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
Hur maximalt avstånd mäts
Ett specifikt maximalt avstånd, till exempel 10 eller 25, avgör hur många icke-söktermer, inklusive stoppord, som kan inträffa mellan de första och sista sökorden i en viss sträng.
NEAR((dogs, cats, "hunting mice"), 3)
returnerar till exempel följande rad, där det totala antalet icke-söktermer är tre ("enjoy
", "but
" och "avoid
"):
"Cats
enjoy
hunting mice``, but avoid
dogs``.
"
Samma närhetsvillkor skulle inte returnera följande rad, eftersom det maximala avståndet överskrids av de fyra icke-söktermer ("enjoy
", "but
", "usually
", och "avoid
"):
"Cats
enjoy
hunting mice``, but usually avoid
dogs``.
"
Kombinera NEAR med andra termer
Du kan kombinera NEAR med några andra termer. Du kan använda AND (&), OR (|) eller AND NOT (&!) för att kombinera en anpassad närhetsterm med en annan anpassad närhetsterm, en enkel term eller en prefixterm. Till exempel:
CONTAINS('NEAR((term1, term2),5) OCH term3')
CONTAINS('NEAR((term1, term2),5) eller term3')
CONTAINS('NEAR((term1, term2),5) OCH INTE term3')
CONTAINS('NEAR((term1, term2),5) OCH NEAR((term3, term4),2)')
CONTAINS('NEAR((term1, term2),5) ELLER NEAR((term3, term4),2, TRUE)')
Till exempel
CONTAINS(column_name, 'NEAR((term1, term2), 5, TRUE) AND term3')
Du kan inte kombinera NEAR med en generationsterm (ISABOUT ...) eller en viktad term (FORMSOF ...).
Mer information om närhetssökningar
Överlappande förekomster av söktermer
Alla närhetssökningar letar alltid efter endast icke-överlappande förekomster. Överlappande förekomster av söktermer kvalificeras aldrig som matchningar. Tänk till exempel på följande närhetsterm, som söker efter "
A
" och "AA
" i den här ordningen med ett maximalt avstånd på två termer:CONTAINS(column_name, 'NEAR((A,AA), 2, TRUE)')
De möjliga matchningarna är som "
AAA
", "A.AA
" och "A..AA
". Rader som bara innehåller "AA
" skulle inte matcha.Not
Du kan ange termer som överlappar, till exempel
NEAR("mountain bike", "bike trails")
eller(NEAR(comfort*, comfortable), 5)
. Om du anger överlappande termer ökar frågans komplexitet genom att öka möjliga matchningspermutationer. Om du anger ett stort antal sådana överlappande termer kan frågan få slut på resurser och misslyckas. Om detta inträffar förenklar du frågan och försöker igen.NEAR (oavsett om ett maximalt avstånd anges) anger det logiska avståndet mellan termer i stället för det absoluta avståndet mellan dem. Till exempel behandlas termer inom olika fraser eller meningar inom ett stycke som längre ifrån varandra än termer i samma fras eller mening, oavsett deras faktiska närhet, under antagandet att de är mindre relaterade. På samma sätt betraktas termer i olika stycken som om de är ännu längre från varandra. Om en matchning sträcker sig över slutet av en mening, ett stycke eller ett kapitel ökas det mellanrum som används för att rangordna ett dokument med 8, 128 respektive 1024.
Påverkan av närhetsvillkor på rangordningen av funktionen CONTAINSTABLE
När NEAR används i funktionen CONTAINSTABLE påverkar antalet träffar i ett dokument i förhållande till dess längd samt avståndet mellan de första och sista sökorden i var och en av träffarna rangordningen för varje dokument. För en allmän närhetsterm, om de matchade sökorden är >50 logiska termer ifrån varandra, är rangordningen som returneras i ett dokument 0. För en anpassad närhetsterm som inte anger ett heltal som maximalt avstånd får ett dokument som endast innehåller träffar vars mellanrum är >100 logiska termer en rangordning på 0. Mer information om rangordning av anpassade närhetssökningar finns i Begränsa sökresultat med RANK.
Alternativet transformera brusord server
Värdet för omvandla brusord påverkar hur SQL Server behandlar stoppord om de specificeras i närhetssökningar. Mer information finns i transformera brusord serverkonfigurationsalternativet.
Se även
CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
fråga med Full-Text Sök