Ricerca di parole vicine a un'altra parola con NEARSearch for Words Close to Another Word with NEAR

Per cercare parole o frasi vicine, è possibile usare un termine di prossimità NEAR in un predicato CONTAINS o in una funzione CONTAINSTABLE.You can use the proximity term NEAR in a CONTAINS predicate or CONTAINSTABLE function to search for words or phrases near one another.

Panoramica di NEAR Overview of NEAR

NEAR include le funzionalità seguenti:NEAR has the following features:

  • È possibile specificare il numero massimo di termini non di ricerca che separano il primo e l'ultimo termine di ricerca.You can specify the maximum number of non-search terms that separate the first and last search terms.

  • È possibile cercare parole o frasi in qualsiasi ordine o parole e frasi in un ordine specifico.You can search for words or phrases in any order, or you can search for words and phrases in a specific order.

  • È possibile specificare il numero massimo di termini non di ricerca, oppure la distanza massimache separa il primo e l'ultimo termine di ricerca per formare una corrispondenza.You can specify the maximum number of non-search terms, or maximum distance, that separates the first and last search terms in order to constitute a match.

  • Se si specifica il numero massimo di termini, è inoltre possibile specificare che nelle corrispondenze devono essere inclusi i termini di ricerca nell'ordine specificato.If you specify the maximum number of terms, you can also specify that matches must contain the search terms in the specified order.

Per essere considerata una corrispondenza, una stringa di testo deve soddisfare i seguenti requisiti:To qualify as a match, a string of text must:

  • Iniziare con uno dei termini di ricerca specificati e terminare con uno degli altri termini di ricerca specificati.Start with one of the specified search terms and end with the one of the other specified search terms.

  • Contenere tutti i termini di ricerca specificati.Contain all of the specified search terms.

  • Il numero di termini non di ricerca, incluse le parole non significative, presenti tra i primo e l'ultimo termine di ricerca deve essere minore o uguale alla distanza massima, se specificata.The number of non-search terms, including stopwords, that occur between the first and last search terms must be less than or equal to the maximum distance, if the maximum distance is specified.

Sintassi di NEARSyntax of NEAR

La sintassi di base di NEAR è la seguente:The basic syntax of NEAR is:

 NEAR (  

 {  

 *search_term* [ ,…*n* ]  

 |  

 (*search_term* [ ,…*n* ] ) [, <maximum_distance> [, <match_order> ] ]  

 }  

 )  

Per altre informazioni sulla sintassi, vedere CONTAINS (Transact-SQL).For more info about the syntax, see CONTAINS (Transact-SQL).

EsempiExamples

Esempio 1Example 1

È possibile, ad esempio, cercare 'John' entro due termini 'Smith', come segue:For example, you could search for 'John' within two terms of 'Smith', as follows:

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

Esempi di stringhe corrispondenti sono "John Jacob Smith" e "Smith, John".Some examples of strings that match are "John Jacob Smith" and "Smith, John". La stringa "John Jones knows Fred Smith" include tre termini non di ricerca intermedi, pertanto non è una corrispondenza.The string "John Jones knows Fred Smith" contains three intervening non-search terms, so it is not a match.

Per ottenere che i termini vengano trovati nell'ordine specificato, modificare il termine di prossimità di esempio in NEAR((John, Smith),2, TRUE). In questo modo viene effettuata la ricerca di "John" entro due termini "Smith", ma solo quando "John" precede "Smith".To require that the terms be found in the specified order, you would change the example proximity term to NEAR((John, Smith),2, TRUE). This searches for "John" within two terms of "Smith" but only when "John" precedes "Smith". In una lingua con direzione di lettura da sinistra a destra, ad esempio la lingua inglese, un esempio di stringa corrispondente è il seguente: "John Jacob Smith".In a language that reads from left to right, such as English, an example of a string that matches is "John Jacob Smith".

Si noti che per le lingue con lettura da destra a sinistra, come l'arabo o l'ebraico, i termini specificati vengono applicati in ordine inverso dal motore di ricerca full-text.Note that for a language that reads from right to left, such as Arabic or Hebrew, the Full-Text Engine applies the specified terms in reverse order. L'ordine di visualizzazione di parole specificate nelle lingue con scrittura da destra a sinistra viene inoltre invertito automaticamente da Esplora oggetti in SQL Server Management StudioSQL Server Management Studio .Also, Object Explorer in SQL Server Management StudioSQL Server Management Studio automatically reverses the display order of words specified in right-to-left languages.

Esempio 2Example 2

Nell'esempio seguente viene effettuata la ricerca nella tabella Production.Document del database di esempio AdventureWorks di tutti i riepiloghi di documenti che contengono sia la parola "riflettore" che la parola "supporto".The following example searches the Production.Document table of the AdventureWorks sample database for all document summaries that contain the word "reflector" in the same document as the word "bracket".

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  

Modalità di misurazione della distanza massimaHow maximum distance is measured

Una distanza massima specifica, ad esempio 10 o 25, determina il numero di termini non di ricerca, incluse le parole non significative, che possono essere presenti tra il primo e l'ultimo termine di ricerca in una determinata stringa.A specific maximum distance, such as 10 or 25, determines how many non-search terms, including stopwords, can occur between the first and last search terms in a given string. Ad esempio, NEAR((dogs, cats, "hunting mice"), 3) restituirà la riga seguente nella quale sono complessivamente presenti tre termini non di ricerca ("enjoy", "but" e "avoid"):For example, NEAR((dogs, cats, "hunting mice"), 3) would return the following row, in which the total number of non-search terms is three ("enjoy", "but", and "avoid"):

"Cats enjoy hunting mice``, but avoid dogs``.""Cats enjoy hunting mice``, but avoid dogs``."

Lo stesso termine di prossimità non restituirà la riga seguente, perché la distanza massima viene superata dai quattro termini non di ricerca ("enjoy", "but", "usually" e "avoid"):The same proximity term would not return the following row, because the maximum distance is exceeded by the four non-search terms ("enjoy", "but", "usually", and "avoid"):

"Cats enjoy hunting mice``, but usually avoid dogs``.""Cats enjoy hunting mice``, but usually avoid dogs``."

Combinare NEAR con altri terminiCombine NEAR with other terms

È possibile combinare NEAR con altri termini.You can combine NEAR with some other terms. È possibile usare AND (&), OR (|) oppure AND NOT (&!) per combinare un termine di prossimità personalizzato con un altro termine di prossimità personalizzato, un termine semplice o un termine prefisso.You can use AND (&), OR (|), or AND NOT (&!) to combine a custom proximity term with another custom proximity term, a simple term, or a prefix term. Esempio:For example:

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

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

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

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

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

    Ad esempio,For example,

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

Non è possibile combinare NEAR con un termine generazionale (ISABOUT …) o un termine ponderato (FORMSOF …).You can't combine NEAR with a generation term (ISABOUT …) or a weighted term (FORMSOF …).

Altre informazioni sulle ricerche di prossimità More info about proximity searches

  • Occorrenze di termini di ricerca sovrapposteOverlapping occurrences of search terms

    In tutte le ricerche per prossimità viene sempre effettuata la ricerca solo di occorrenze non sovrapposte.All proximity searches always look for only non-overlapping occurrences. Le occorrenze di termini di ricerca sovrapposte non vengono mai considerate come corrispondenze.Overlapping occurrences of search terms never qualify as matches. Si consideri, ad esempio, il termine di prossimità seguente che effettua la ricerca di "A" e "AA" in questo ordine con una distanza massima di due termini:For example, consider the following proximity term, which searches "A" and "AA" in this order with a maximum distance of two terms:

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

    Le corrispondenze possibili sono "AAA", "A.AA" e "A..AA".The possible matches are as "AAA", "A.AA", and "A..AA". Le righe che contengono solo "AA" non restituirebbero alcuna corrispondenza.Rows containing just "AA" would not match.

    Nota

    È possibile specificare termini che si sovrappongono, ad esempio, NEAR("mountain bike", "bike trails") o (NEAR(comfort*, comfortable), 5).You can specify terms that overlap, for example, NEAR("mountain bike", "bike trails") or (NEAR(comfort*, comfortable), 5). In tal caso, tuttavia, aumenterebbe la complessità della query, aumentando di conseguenza le possibili permutazioni delle corrispondenze.Specifying a overlapping terms increases the complexity of the query by increasing the possible match permutations. Se si specifica un numero elevato di tali termini sovrapposti, è possibile che le risorse della query si esauriscano e che l'operazione abbia esito negativo.If you specify a large number of such overlapping terms, the query can run out of resources and fail. In tal caso, semplificare la query e riprovare.If this occurs, simplify the query and try again.

  • NEAR (indipendentemente dal fatto venga specificata o meno una distanza massima) indica la distanza logica anziché la distanza assoluta tra i termini.NEAR (regardless of whether a maximum distance is specified) indicates the logical distance between terms, rather than the absolute distance between them. Ad esempio, i termini all'interno di espressioni o frasi diverse di un paragrafo vengono trattati come più lontani dei termini nella stessa espressione o frase, indipendentemente dalla loro prossimità effettiva, presupponendo che siano meno correlati.For example, terms within different phrases or sentences within a paragraph are treated as farther apart than terms in the same phrase or sentence, regardless of their actual proximity, on the assumption that they are less related. In modo analogo, i termini presenti in paragrafi diversi vengono trattati come ancora più lontani.Likewise, terms in different paragraphs are treated as being even farther apart. Se una corrispondenza si estende fino alla fine di una frase, un paragrafo o un capitolo, il gap utilizzato per la classificazione per rango di un documento viene aumentato rispettivamente di 8, 128 o 1024.If a match spans the end of a sentence, paragraph, or chapter, the gap used for ranking a document is increased by 8, 128, or 1024, respectively.

  • Impatto dei termini di prossimità sulla classificazione per rango tramite la funzione CONTAINSTABLEImpact of proximity terms on ranking by the CONTAINSTABLE function

    Quando NEAR viene utilizzato nella funzione CONTAINSTABLE, il numero di riscontri presenti in un documento in rapporto alla relativa lunghezza, nonché alla distanza tra i primo e l'ultimo termine di ricerca in ognuno dei riscontri, influisce sulla classificazione per rango di ogni documento.When NEAR is used in the CONTAINSTABLE function, the number of hits in a document relative to its length as well as the distance between the first and last search terms in each of the hits affects the ranking of each document. Per un termine di prossimità generico, se i termini di ricerca corrispondenti sono separati da >50 termini logici, il rango restituito per un documento sarà pari a 0.For a generic proximity term, if the matched search terms are >50 logical terms apart, the rank returned on a document is 0. Per un termine di prossimità personalizzato in cui non è specificato un intero come distanza massima, il rango restituito per un documento che contiene solo riscontri il cui gap è >100 termini logici sarà pari a 0.For a custom proximity term that does not specify an integer as the maximum distance, a document that contains only hits whose gap is >100 logical terms will receive a ranking of 0. Per altre informazioni sulla classificazione per rango di ricerche per prossimità personalizzate, vedere Limitare i risultati della ricerca con RANK.For more information about ranking of custom proximity searches, see Limit Search Results with RANK.

  • Opzione server Transform Noise WordsThe transform noise words server option

    Il valore di Transform Noise Words influisce sul modo in cui SQL ServerSQL Server gestisce le parole non significative, se vengono specificate nelle ricerche per prossimità.The value of transform noise words impacts how SQL ServerSQL Server treats stopwords if they are specified in proximity searches. Per altre informazioni, vedere transform noise words Server Configuration Option.For more information, see transform noise words Server Configuration Option.

Vedere ancheSee Also

CONTAINS (Transact-SQL)CONTAINS (Transact-SQL)
CONTAINSTABLE (Transact-SQL) CONTAINSTABLE (Transact-SQL)
Esecuzione della query con ricerca Full-Text Query with Full-Text Search