Udostępnij za pośrednictwem


Wyszukiwanie wyrazów blisko innego wyrazu za pomocą NEAR

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Możesz użyć operatora bliskości BLISKO w predykacie CONTAINS lub funkcji CONTAINSTABLE, aby wyszukać wyrazy lub frazy w pobliżu siebie.

Omówienie funkcji NEAR

NEAR ma następujące funkcje:

  • Możesz określić maksymalną liczbę terminów, które nie są wyszukiwane, oddzielające pierwsze i ostatnie terminy wyszukiwania.

  • Możesz wyszukiwać wyrazy lub frazy w dowolnej kolejności lub wyszukiwać wyrazy i frazy w określonej kolejności.

  • Można określić maksymalną liczbę terminów niebędących wyszukiwaniem albo maksymalną odległość, która oddziela pierwsze i ostatnie terminy wyszukiwania w celu utworzenia dopasowania.

  • Jeśli określisz maksymalną liczbę terminów, możesz również określić, że dopasowania muszą zawierać terminy wyszukiwania w określonej kolejności.

Aby spełniać kryteria jako dopasowanie, ciąg tekstu musi:

  • Zacznij od jednego z określonych terminów wyszukiwania i zakończ jedną z pozostałych określonych terminów wyszukiwania.

  • Zawiera wszystkie określone terminy wyszukiwania.

  • Liczba terminów innych niż wyszukiwanie, w tym stopwords, które występują między pierwszym i ostatnimi terminami wyszukiwania, musi być mniejsza lub równa maksymalnej odległości, jeśli zostanie określona maksymalna odległość.

Składnia NEAR

Podstawowa składnia NEAR to:

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

Aby uzyskać więcej informacji na temat składni, zobacz CONTAINS (Transact-SQL).

Przykłady

Przykład 1

Możesz na przykład wyszukać frazę "John" w dwóch terminach "Smith", w następujący sposób:

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

Niektóre przykłady pasujących ciągów to "John Jacob Smith" i "Smith, John". Ciąg "John Jones knows Fred Smith" zawiera trzy terminy nie związane z wyszukiwaniem, więc nie jest dopasowaniem.

Aby wymagać, aby terminy zostały znalezione w określonej kolejności, należy zmienić przykładowy termin zbliżeniowy na NEAR((John, Smith),2, TRUE).. To wyszukiwanie szuka "John" w obrębie dwóch terminów "Smith", ale tylko wtedy, gdy "John" poprzedza "Smith". W języku, który odczytuje od lewej do prawej, na przykład angielski, przykład ciągu, który pasuje, to "John Jacob Smith".

Należy pamiętać, że w przypadku języka odczytywanego od prawej do lewej, takiego jak arabski lub hebrajski, aparat Full-Text stosuje określone terminy w odwrotnej kolejności. Ponadto Eksplorator obiektów w programie SQL Server Management Studio automatycznie odwraca kolejność wyświetlania wyrazów określonych w językach od prawej do lewej.

Przykład 2

Poniższy przykład przeszukuje tabelę Production.Document w przykładowej bazie danych AdventureWorks, wyszukując wszystkie podsumowania dokumentów, które zawierają wyraz "reflector" i słowo "bracket" w tym samym dokumencie.

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  

Jak mierzona jest maksymalna odległość

Określona maksymalna odległość, taka jak 10 lub 25, określa, ile terminów, które nie są wyszukiwane, w tym wyrazy stopowe, może wystąpić między pierwszym a ostatnim terminem wyszukiwania w danym ciągu. Na przykład NEAR((dogs, cats, "hunting mice"), 3) zwróci następujący wiersz, w którym całkowita liczba terminów innych niż wyszukiwanie wynosi trzy ("enjoy", "but" i "avoid"):

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

Ten sam termin zbliżeniowy nie zwróci następującego wiersza, ponieważ maksymalna odległość została przekroczona przez cztery terminy nie będące słowami kluczowymi ("enjoy", "but", "usually" i "avoid"):

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

Łączenie funkcji NEAR z innymi terminami

Możesz połączyć pozycję NEAR z innymi terminami. Można użyć and (&), OR (|) lub AND NOT (&!), aby połączyć niestandardowy termin zbliżeniowy z innym niestandardowym terminem zbliżeniowym, prostym terminem lub terminem prefiksu. Na przykład:

  • CONTAINS('NEAR((term1, termin 2),5) I term3')

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

  • CONTAINS('NEAR((term1, termin2),5) ORAZ NIE term3')

  • CONTAINS("NEAR((term1, term2),5) I NEAR((term3, term4),2)")

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

Na przykład

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

Nie można połączyć funkcji NEAR z terminem generacyjnym (ISABOUT ...) ani terminem z wagą (FORMSOF ...).

Więcej informacji o wyszukiwaniach w pobliżu

  • Nakładające się wystąpienia terminów wyszukiwania

    Wszystkie wyszukiwania przybliżeniowe zawsze szukają tylko nienakładających się wystąpień. Nakładające się przypadki terminów wyszukiwania nigdy nie kwalifikują się jako zgodności. Rozważmy na przykład następujące wyrażenie zbliżeniowe, które wyszukuje "A" i "AA" w podanej kolejności z maksymalną odległością dwóch słów.

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

    Możliwe dopasowania to "AAA", "A.AA", i "A..AA". Wiersze zawierające tylko "AA" nie będą zgodne.

    Notatka

    Możesz określić terminy nakładające się na przykład NEAR("mountain bike", "bike trails") lub (NEAR(comfort*, comfortable), 5). Określanie nakładających się terminów zwiększa złożoność zapytania przez zwiększenie możliwych permutacji dopasowania. Jeśli określisz dużą liczbę takich nakładających się terminów, zapytaniu może zabraknąć zasobów i może się nie powieść. Jeśli tak się dzieje, uprość zapytanie i spróbuj ponownie.

  • NEAR (niezależnie od tego, czy określono maksymalną odległość) wskazuje logiczną odległość między terminami, a nie odległość bezwzględną między nimi. Na przykład terminy w różnych frazach lub zdaniach w akapicie są traktowane tak daleko od siebie niż terminy w tej samej frazie lub zdaniu, niezależnie od ich rzeczywistej odległości, przy założeniu, że są one mniej powiązane. Podobnie terminy w różnych akapitach są traktowane jako jeszcze bardziej oddalone. Jeśli dopasowanie obejmuje koniec zdania, akapitu lub rozdziału, różnica używana do klasyfikowania dokumentu jest zwiększana odpowiednio o 8, 128 lub 1024.

  • Wpływ terminów zbliżeniowych na klasyfikację przez funkcję CONTAINSTABLE

    Gdy funkcja NEAR jest używana w funkcji CONTAINSTABLE, liczba trafień w dokumencie w stosunku do jego długości, a także odległość między pierwszymi i ostatnimi terminami wyszukiwania w każdym trafieniu wpływa na klasyfikację każdego dokumentu. W przypadku ogólnego terminu zbliżeniowego, jeśli dopasowane terminy wyszukiwania są oddalone o >50 terminów logicznych, ranga zwracana w dokumencie wynosi 0. W przypadku niestandardowego terminu zbliżeniowego, który nie określa liczby całkowitej jako maksymalnej odległości, dokument zawierający jedynie trafienia, których różnica wynosi >100 terminów logicznych, zostanie oceniony na 0. Aby uzyskać więcej informacji na temat sortowania niestandardowych wyszukiwań z bliska, zobacz Ogranicz wyniki wyszukiwania przy użyciu funkcji RANK.

  • Opcja serwera przekształć wyrazy szumu

    Wartość transformacji wyrazów szumu wpływa na sposób, w jaki program SQL Server traktuje stopwords, jeśli są one określone w wyszukiwaniach kontekstowych. Aby uzyskać więcej informacji, zobacz opcję konfiguracji serwera dotyczącą przekształcania wyrazów zakłócających.

Zobacz też

CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL)
Zapytanie z Full-Text Wyszukaj