Sintassi di query Lucene in Azure ricerca cognitivaLucene query syntax in Azure Cognitive Search

Quando si creano query, è possibile optare per la sintassi del parser di query Lucene per i moduli di query specializzati: caratteri jolly, ricerca fuzzy, ricerca di prossimità, espressioni regolari.When creating queries, you can opt for the Lucene Query Parser syntax for specialized query forms: wildcard, fuzzy search, proximity search, regular expressions. Gran parte della sintassi del parser di query Lucene è stata implementata intatto in Azure ricerca cognitiva, ad eccezione delle ricerche di intervallo costruite tramite $filter espressioni.Much of the Lucene Query Parser syntax is implemented intact in Azure Cognitive Search, with the exception of range searches which are constructed through $filter expressions.

La sintassi Lucene completa viene usata per le espressioni di query passate nel search parametro di una richiesta di ricerca di documenti (API REST) , da non confondere con la sintassi OData usata per le $filter $orderby espressioni e nella stessa richiesta.The full Lucene syntax is used for query expressions passed in the search parameter of a Search Documents (REST API) request, not to be confused with the OData syntax used for the $filter and $orderby expressions in the same request. I parametri OData hanno sintassi e regole diverse per la costruzione di query, l'escape di stringhe e così via.OData parameters have different syntax and rules for constructing queries, escaping strings, and so on.

Esempio (sintassi completa)Example (full syntax)

Impostare il queryType parametro per specificare il Lucene completo.Set the queryType parameter to specify full Lucene. Nell'esempio seguente vengono richiamati la ricerca nel campo e l'incremento dei termini.The following example invokes in-field search and term boosting. Questa query cerca gli hotel in cui il campo categoria contiene il termine "budget".This query looks for hotels where the category field contains the term "budget". Tutti i documenti contenenti la frase "rinnovata di recente" vengono classificati più in alto a causa del valore Boost del termine (3).Any documents containing the phrase "recently renovated" are ranked higher as a result of the term boost value (3).

POST /indexes/hotels-sample-index/docs/search?api-version=2020-06-30
{
  "queryType": "full",
  "search": "category:budget AND \"recently renovated\"^3",
  "searchMode": "all"
}

Il searchMode parametro è pertinente in questo esempio.The searchMode parameter is relevant in this example. Quando nella query sono presenti operatori, è in genere consigliabile impostare searchMode=all per assicurarsi che venga trovata una corrispondenza per tutti i criteri.Whenever operators are on the query, you should generally set searchMode=all to ensure that all of the criteria is matched.

Per altri esempi, vedere esempi di sintassi di query Lucene.For additional examples, see Lucene query syntax examples. Per informazioni dettagliate sulla richiesta di query e sui parametri, vedere eseguire ricerche nei documenti (API REST).For details about the query request and parameters, see Search Documents (REST API).

Nozioni fondamentali sulla sintassiSyntax fundamentals

Le nozioni fondamentali seguenti sulla sintassi si applicano a tutte le query che usano la sintassi Lucene.The following syntax fundamentals apply to all queries that use the Lucene syntax.

Valutazione degli operatori nel contestoOperator evaluation in context

Il posizionamento determina se un simbolo viene interpretato come operatore o semplicemente come un altro carattere in una stringa.Placement determines whether a symbol is interpreted as an operator or just another character in a string.

Nella sintassi Lucene completa, ad esempio, la tilde (~) viene usata sia per la ricerca fuzzy che per la ricerca per prossimità.For example, in Lucene full syntax, the tilde (~) is used for both fuzzy search and proximity search. Quando viene inserita dopo una frase tra virgolette, ~ richiama la ricerca per prossimità.When placed after a quoted phrase, ~ invokes proximity search. Quando viene inserita alla fine di un termine, ~ richiama la ricerca fuzzy.When placed at the end of a term, ~ invokes fuzzy search.

All'interno di un termine, ad esempio "business~analyst", il carattere non viene valutato come operatore.Within a term, such as "business~analyst", the character is not evaluated as an operator. In questo caso, supponendo che la query sia relativa a un termine o a una frase, la ricerca full-text con l'analisi lessicale elimina il carattere ~ e suddivide il termine "business~analyst" in due: business OR analyst.In this case, assuming the query is a term or phrase query, full text search with lexical analysis strips out the ~ and breaks the term "business~analyst" in two: business OR analyst.

L'esempio precedente è relativo alla tilde (~), ma lo stesso principio si applica a ogni operatore.The example above is the tilde (~), but the same principle applies to every operator.

Escape dei caratteri specialiEscaping special characters

Per usare uno degli operatori di ricerca come parte del testo di ricerca, eseguire l'escape del carattere anteponendo una singola barra rovesciata ( \ ).In order to use any of the search operators as part of the search text, escape the character by prefixing it with a single backslash (\). Ad esempio, per una ricerca con caratteri jolly su https:// , dove :// fa parte della stringa di query, è necessario specificare search=https\:\/\/* .For example, for a wildcard search on https://, where :// is part of the query string, you would specify search=https\:\/\/*. Analogamente, un modello di numero di telefono con escape potrebbe essere simile al seguente \+1 \(800\) 642\-7676 .Similarly, an escaped phone number pattern might look like this \+1 \(800\) 642\-7676.

I caratteri speciali che richiedono l'escape includono quanto segue:Special characters that require escaping include the following:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

Nota

Sebbene l'escape mantenga i token insieme, l' analisi lessicale durante l'indicizzazione può essere eliminata. Ad esempio, l'analizzatore Lucene standard interrompe le parole su trattini, spazi vuoti e altri caratteri.Although escaping keeps tokens together, lexical analysis during indexing may strip them out. For example, the standard Lucene analyzer will break words on hyphens, whitespace, and other characters. Se sono necessari caratteri speciali nella stringa di query, potrebbe essere necessario un analizzatore che li conserva nell'indice.If you require special characters in the query string, you might need an analyzer that preserves them in the index. Alcune opzioni includono gli analizzatori del linguaggionaturale Microsoft, che conserva le parole con trattino o un analizzatore personalizzato per modelli più complessi.Some choices include Microsoft natural language analyzers, which preserves hyphenated words, or a custom analyzer for more complex patterns. Per ulteriori informazioni, vedere termini parziali, modelli e caratteri speciali.For more information, see Partial terms, patterns, and special characters.

Codifica dei caratteri riservati e non sicuri negli URLEncoding unsafe and reserved characters in URLs

Assicurarsi che tutti i caratteri riservati e non sicuri siano codificati in un URL.Please ensure all unsafe and reserved characters are encoded in a URL. Ad esempio,' #' è un carattere non sicuro perché è un identificatore di frammento/ancoraggio in un URL.For example, '#' is an unsafe character because it is a fragment/anchor identifier in a URL. Il carattere deve essere codificato al %23, se usato in un URL.The character must be encoded to %23 if used in a URL. ' &' è =' sono esempi di caratteri riservati in quanto delimitano i parametri e specificano i valori in Azure ricerca cognitiva.'&' and '=' are examples of reserved characters as they delimit parameters and specify values in Azure Cognitive Search. Per altri dettagli, vedere RFC1738: Uniform Resource Locators (URL) .Please see RFC1738: Uniform Resource Locators (URL) for more details.

I caratteri non sicuri sono " ` < > # % { } | \ ^ ~ [ ].Unsafe characters are " ` < > # % { } | \ ^ ~ [ ]. I caratteri riservati sono ; / ? : @ = + &.Reserved characters are ; / ? : @ = + &.

Operatori booleaniBoolean operators

È possibile incorporare gli operatori booleani in una stringa di query per migliorare la precisione di una corrispondenza.You can embed Boolean operators in a query string to improve the precision of a match. La sintassi completa supporta gli operatori di testo oltre agli operatori di caratteri.The full syntax supports text operators in addition to character operators. Specificare sempre gli operatori booleani di testo (AND, OR, NOT) in lettere tutte maiuscole.Always specify text boolean operators (AND, OR, NOT) in all caps.

Operatore di testoText operator CarattereCharacter EsempioExample UsoUsage
ANDAND &, +&, + wifi + luxury Specifica i termini che una corrispondenza deve contenere.Specifies terms that a match must contain. Nell'esempio, il motore di query cercherà i documenti contenenti sia wifi che luxury .In the example, the query engine will look for documents containing both wifi and luxury. Il carattere più ( + ) viene usato per i termini richiesti.The plus character (+) is used for required terms. Ad esempio, +wifi +luxury stabilisce che entrambi i termini devono essere presenti nel campo di un singolo documento.For example, +wifi +luxury stipulates that both terms must appear somewhere in the field of a single document.
OROR | wifi | luxury Trova una corrispondenza quando viene trovato uno o più termini.Finds a match when either term is found. Nell'esempio, il motore di query restituirà match nei documenti contenenti wifi o luxury o entrambi.In the example, the query engine will return match on documents containing either wifi or luxury or both. Poiché OR è l'operatore di congiunzione predefinito, è anche possibile escluderlo, in modo che wifi luxury sia l'equivalente di wifi | luxury.Because OR is the default conjunction operator, you could also leave it out, such that wifi luxury is the equivalent of wifi | luxury.
NOTNOT !, -!, - wifi –luxury Restituisce le corrispondenze nei documenti che escludono il termine.Returns matches on documents that exclude the term. Ad esempio, wifi –luxury cercherà i documenti con il wifi termine ma non luxury .For example, wifi –luxury will search for documents that have the wifi term but not luxury.

Il searchMode parametro in una richiesta di query controlla se un termine con l'operatore Not è individuato o ORed con altri termini nella query (presupponendo che non esista un + | operatore OR su altri termini).The searchMode parameter on a query request controls whether a term with the NOT operator is ANDed or ORed with other terms in the query (assuming there is no + or | operator on the other terms). I valori validi sono any o all.Valid values include any or all.

searchMode=any aumenta il richiamo delle query includendo più risultati e per impostazione predefinita - viene interpretato come "o not".searchMode=any increases the recall of queries by including more results, and by default - will be interpreted as "OR NOT". Ad esempio, wifi -luxury troverà la corrispondenza con documenti contenenti il termine wifi o quelli non contenenti il termine luxury.For example, wifi -luxury will match documents that either contain the term wifi or those that do not contain the term luxury.

searchMode=all aumenta la precisione delle query includendo un minor numero di risultati e, per impostazione predefinita, viene interpretato come "AND NOT".searchMode=all increases the precision of queries by including fewer results, and by default - will be interpreted as "AND NOT". Ad esempio, wifi -luxury troverà la corrispondenza con documenti contenenti il termine wifi e quelli non contenenti il termine "luxury".For example, wifi -luxury will match documents that contain the term wifi and do not contain the term "luxury". Si tratta di un comportamento verosimilmente più intuitivo per l'operatore -.This is arguably a more intuitive behavior for the - operator. Pertanto, è consigliabile utilizzare searchMode=all anziché searchMode=any se si desidera ottimizzare la ricerca di precisione anziché richiamare e gli utenti utilizzano spesso l' - operatore nelle ricerche.Therefore, you should consider using searchMode=all instead of searchMode=any if you want to optimize searches for precision instead of recall, and Your users frequently use the - operator in searches.

Quando si decide di eseguire un' searchMode impostazione, prendere in considerazione i modelli di interazione utente per le query in varie applicazioni.When deciding on a searchMode setting, consider the user interaction patterns for queries in various applications. È più probabile che gli utenti che eseguono la ricerca di informazioni includano un operatore in una query, anziché i siti di e-commerce che dispongono di più strutture di navigazione predefinite.Users who are searching for information are more likely to include an operator in a query, as opposed to e-commerce sites that have more built-in navigation structures.

È possibile definire un'operazione di ricerca in campo con la fieldName:searchExpression sintassi, in cui l'espressione di ricerca può essere una singola parola o una frase o un'espressione più complessa tra parentesi, facoltativamente con gli operatori booleani.You can define a fielded search operation with the fieldName:searchExpression syntax, where the search expression can be a single word or a phrase, or a more complex expression in parentheses, optionally with Boolean operators. Ecco alcuni esempi:Some examples include the following:

  • genre:jazz NOT historygenre:jazz NOT history

  • artists:("Miles Davis" "John Coltrane")artists:("Miles Davis" "John Coltrane")

Assicurarsi di inserire più stringhe racchiuse tra virgolette se si vuole che entrambe le stringhe siano valutate come una singola entità, in questo caso per la ricerca di due artisti distinti nel campo artists.Be sure to put multiple strings within quotation marks if you want both strings to be evaluated as a single entity, in this case searching for two distinct artists in the artists field.

Il campo specificato in fieldName:searchExpression deve essere un campo searchable.The field specified in fieldName:searchExpression must be a searchable field. Per informazioni dettagliate sull'uso di attributi dell'indice nelle definizioni campo, vedere Create Index (Creare l'indice).See Create Index for details on how index attributes are used in field definitions.

Nota

Quando si usano le espressioni di ricerca nel campo, non è necessario usare il searchFields parametro perché ogni espressione di ricerca nel campo ha un nome di campo specificato in modo esplicito.When using fielded search expressions, you do not need to use the searchFields parameter because each fielded search expression has a field name explicitly specified. Tuttavia, è comunque possibile utilizzare il searchFields parametro se si desidera eseguire una query in cui alcune parti hanno come ambito un campo specifico e il resto può essere applicato a più campi.However, you can still use the searchFields parameter if you want to run a query where some parts are scoped to a specific field, and the rest could apply to several fields. Ad esempio, la query search=genre:jazz NOT history&searchFields=description corrisponderà jazz solo al genre campo, mentre corrisponderebbe al NOT history description campo.For example, the query search=genre:jazz NOT history&searchFields=description would match jazz only to the genre field, while it would match NOT history with the description field. Il nome del campo fornito in ha fieldName:searchExpression sempre la precedenza sul searchFields parametro, motivo per cui in questo esempio non è necessario includere genre nel searchFields parametro.The field name provided in fieldName:searchExpression always takes precedence over the searchFields parameter, which is why in this example, we do not need to include genre in the searchFields parameter.

Una ricerca fuzzy trova le corrispondenze in termini che hanno una costruzione simile, espandendo un termine fino al massimo di 50 termini che soddisfano i criteri di distanza di due o meno.A fuzzy search finds matches in terms that have a similar construction, expanding a term up to the maximum of 50 terms that meet the distance criteria of two or less. Per ulteriori informazioni, vedere ricerca fuzzy.For more information, see Fuzzy search.

Per eseguire una ricerca fuzzy, usare il carattere tilde "~" alla fine di una singola parola con un parametro facoltativo, un numero compreso tra 0 e 2 (impostazione predefinita), che specifica il numero minimo di operazioni di modifica o "edit distance".To do a fuzzy search, use the tilde "~" symbol at the end of a single word with an optional parameter, a number between 0 and 2 (default), that specifies the edit distance. Ad esempio, "blue~" o "blue~1" restituirà "blue", "blues" e "glue".For example, "blue~" or "blue~1" would return "blue", "blues", and "glue".

La ricerca fuzzy può essere applicata solo a termini, non a frasi, ma è possibile aggiungere la tilde a ogni termine singolarmente in un nome in più parti o in una frase.Fuzzy search can only be applied to terms, not phrases, but you can append the tilde to each term individually in a multi-part name or phrase. Ad esempio, "Unviersty ~ di ~" wSHINGTON ~ "corrisponderà a" University of Washington ".For example, "Unviersty~ of~ "Wshington~" would match on "University of Washington".

Le ricerche per prossimità vengono usate per trovare termini che si trovano vicini in un documento.Proximity searches are used to find terms that are near each other in a document. Inserire un carattere tilde "~" alla fine di una frase seguito dal numero di parole che creano il limite di prossimità.Insert a tilde "~" symbol at the end of a phrase followed by the number of words that create the proximity boundary. Ad esempio, "hotel airport"~5 troverà i termini "hotel" e "airport" entro 5 parole di distanza una dall'altra in un documento.For example, "hotel airport"~5 will find the terms "hotel" and "airport" within 5 words of each other in a document.

Incremento del termineTerm boosting

Questa definizione si riferisce alla termine si riferisce alla classificazione più alta di un documento se contiene il termine con aumento di priorità, rispetto a documenti che non contengono il termine.Term boosting refers to ranking a document higher if it contains the boosted term, relative to documents that do not contain the term. Questo comportamento è diverso dall'assegnazione di punteggi ai profili, perché questo metodo assegna priorità ad alcuni campi, invece che a termini specifici.This differs from scoring profiles in that scoring profiles boost certain fields, rather than specific terms.

L'esempio seguente illustra le differenze.The following example helps illustrate the differences. Si supponga che esista un profilo di punteggio che migliora le corrispondenze in un determinato campo, ad esempio genre (genere) nell'esempio musicstoreindex.Suppose that there's a scoring profile that boosts matches in a certain field, say genre in the musicstoreindex example. L'aumento di priorità di un termine si usa per assegnare a determinati termini di ricerca una priorità maggiore rispetto ad altri.Term boosting could be used to further boost certain search terms higher than others. Ad esempio, rock^2 electronic aumenta la priorità nell'indice dei documenti che contengono tali termini di ricerca nel campo genre rispetto a quelli con altri campi ricercabili.For example, rock^2 electronic will boost documents that contain the search terms in the genre field higher than other searchable fields in the index. Inoltre, i documenti che contengono il termine di ricerca rock verranno classificati con una priorità superiore rispetto all'altro termine di ricerca electronic come risultato del valore di priorità del termine (2).Further, documents that contain the search term rock will be ranked higher than the other search term electronic as a result of the term boost value (2).

Per aumentare la priorità di un termine, usare il carattere accento circonflesso "^", con un fattore di aumento di priorità (un numero) alla fine del termine da cercare.To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. È anche possibile aumentare la priorità delle frasi.You can also boost phrases. Maggiore è il fattore di aumento di priorità, più rilevante sarà il termine rispetto ad altri termini di ricerca.The higher the boost factor, the more relevant the term will be relative to other search terms. Per impostazione predefinita, il fattore di aumento di priorità è 1.By default, the boost factor is 1. Anche se il fattore di aumento di priorità deve essere positivo, può essere minore di 1 (ad esempio 0,20).Although the boost factor must be positive, it can be less than 1 (for example, 0.20).

Una ricerca di espressioni regolari trova una corrispondenza in base ai modelli validi in Apache Lucene, come documentato nella classe RegExp.A regular expression search finds a match based on patterns that are valid under Apache Lucene, as documented in the RegExp class. In ricerca cognitiva di Azure, un'espressione regolare è racchiusa tra barre / .In Azure Cognitive Search, a regular expression is enclosed between forward slashes /.

Ad esempio, per trovare i documenti contenenti "motel" o "hotel", specificare /[mh]otel/.For example, to find documents containing "motel" or "hotel", specify /[mh]otel/. Le ricerche basate su espressioni regolari vengono confrontate con parole singole.Regular expression searches are matched against single words.

Alcuni strumenti e linguaggi impongono requisiti di caratteri di escape aggiuntivi.Some tools and languages impose additional escape character requirements. Per JSON, le stringhe che includono una barra vengono precedute da un carattere di escape con una barra rovesciata: "microsoft.com/azure/" diventa search=/.*microsoft.com\/azure\/.*/ dove search=/.* <string-placeholder>.*/ imposta l'espressione regolare e microsoft.com\/azure\/ è la stringa con una barra con caratteri di escape.For JSON, strings that include a forward slash are escaped with a backward slash: "microsoft.com/azure/" becomes search=/.*microsoft.com\/azure\/.*/ where search=/.* <string-placeholder>.*/ sets up the regular expression, and microsoft.com\/azure\/ is the string with an escaped forward slash.

È possibile utilizzare la sintassi generalmente riconosciuta per più * ricerche con caratteri jolly () o Single ( ? ).You can use generally recognized syntax for multiple (*) or single (?) character wildcard searches. Ad esempio, un'espressione di query search=alpha* restituisce "alfanumerico" o "alfabetico".For example, a query expression of search=alpha* returns "alphanumeric" or "alphabetical". Si noti che il parser di query Lucene supporta l'utilizzo di questi simboli con un singolo termine, non una frase.Note the Lucene query parser supports the use of these symbols with a single term, and not a phrase.

La sintassi Lucene completa supporta la corrispondenza con prefisso, infisso e suffisso.Full Lucene syntax supports prefix, infix, and suffix matching. Tuttavia, se è sufficiente la corrispondenza con prefisso, è possibile usare la sintassi semplice (la corrispondenza dei prefissi è supportata in entrambi).However, if all you need is prefix matching, you can use the simple syntax (prefix matching is supported in both).

La corrispondenza dei suffissi, dove * o ? precede la stringa (come in search=/.*numeric./ ) o la corrispondenza degli infissi richiede la sintassi Lucene completa, nonché i delimitatori di barra delle espressioni regolari / .Suffix matching, where * or ? precedes the string (as in search=/.*numeric./) or infix matching requires full Lucene syntax, as well as the regular expression forward slash / delimiters. Non è possibile usare un carattere * o ?You cannot use a * or ? simbolo come primo carattere di un termine, o all'interno di un termine, senza il / .symbol as the first character of a term, or within a term, without the /.

Nota

Di norma, la corrispondenza dei modelli è lenta, quindi è consigliabile esaminare metodi alternativi, ad esempio la suddivisione in token di n-grammi perimetrale che crea token per sequenze di caratteri in un termine.As a rule, pattern matching is slow so you might want to explore alternative methods, such as edge n-gram tokenization that creates tokens for sequences of characters in a term. L'indice sarà più grande, ma le query potrebbero essere eseguite più velocemente, a seconda della costruzione del modello e della lunghezza delle stringhe da indicizzare.The index will be larger, but queries might execute faster, depending on the pattern construction and the length of strings you are indexing.

Conseguenze di un analizzatore sulle query con caratteri jollyImpact of an analyzer on wildcard queries

Durante l'analisi delle query, le query formulate come prefisso, suffisso, carattere jolly o espressioni regolari vengono passate così come sono all'albero delle query, ignorando l' analisi lessicale.During query parsing, queries that are formulated as prefix, suffix, wildcard, or regular expressions are passed as-is to the query tree, bypassing lexical analysis. Le corrispondenze verranno trovate solo se l'indice contiene le stringhe nel formato specificato dalla query.Matches will only be found if the index contains the strings in the format your query specifies. Nella maggior parte dei casi, è necessario un analizzatore durante l'indicizzazione che conserva l'integrità delle stringhe in modo che i termini parziali e i criteri di ricerca abbiano esito positivo.In most cases, you will need an analyzer during indexing that preserves string integrity so that partial term and pattern matching succeeds. Per altre informazioni, vedere ricerca dei termini parziali in Azure ricerca cognitiva query.For more information, see Partial term search in Azure Cognitive Search queries.

Si consideri una situazione in cui è possibile che la query di ricerca ' terminate *' restituisca risultati che contengono termini quali ' terminate ',' Termination ' è terminates '.Consider a situation where you may want the search query 'terminat*' to return results that contain terms such as 'terminate', 'termination' and 'terminates'.

Se si utilizza l'analizzatore en. Lucene (English Lucene), viene applicato lo stemming aggressivo di ogni termine.If you were to use the en.lucene (English Lucene) analyzer, it would apply aggressive stemming of each term. Ad esempio,' terminate ',' Termination ',' terminates ' verrà tutti suddivisi in token nel token ' termi ' nell'indice.For example, 'terminate', 'termination', 'terminates' will all be tokenized down to the token 'termi' in your index. Dall'altro lato, i termini nelle query che usano caratteri jolly o la ricerca fuzzy non vengono analizzati. Pertanto, non ci sono risultati corrispondenti alla query ' terminate *'.On the other side, terms in queries using wildcards or fuzzy search are not analyzed at all., so there would be no results that would match the 'terminat*' query.

Dall'altro lato, gli analizzatori Microsoft (in questo caso, en. Microsoft Analyzer) sono un po' più avanzati e usano lemmatizzazione anziché lo stemming.On the other side, the Microsoft analyzers (in this case, the en.microsoft analyzer) are a bit more advanced and use lemmatization instead of stemming. Ciò significa che tutti i token generati devono essere parole in lingua inglese valide.This means that all generated tokens should be valid English words. Ad esempio,' terminate ',' terminazioni ' è terminazione ' rimarranno per intero nell'indice e sarebbero una scelta preferibile per gli scenari che dipendono molto da caratteri jolly e ricerca fuzzy.For example, 'terminate', 'terminates' and 'termination' will mostly stay whole in the index, and would be a preferable choice for scenarios that depend a lot on wildcards and fuzzy search.

Punteggio delle query con caratteri jolly e regexScoring wildcard and regex queries

Azure ricerca cognitiva usa il punteggio in base alla frequenza (tf-IDF) per le query di testo.Azure Cognitive Search uses frequency-based scoring (TF-IDF) for text queries. Per le query con caratteri jolly e regex, in cui l'ambito dei termini può essere potenzialmente ampio, il fattore frequenza viene tuttavia ignorato per evitare che la classificazione privilegi le corrispondenze con termini più rari.However, for wildcard and regex queries where scope of terms can potentially be broad, the frequency factor is ignored to prevent the ranking from biasing towards matches from rarer terms. Tutte le corrispondenze vengono trattate equamente per le ricerche con caratteri jolly e regex.All matches are treated equally for wildcard and regex searches.

Caratteri specialiSpecial characters

In alcuni casi, è possibile cercare un carattere speciale, ad esempio un'❤' emoji o il segno ' €'.In some circumstances, you may want to search for a special character, like an '❤' emoji or the '€' sign. In questi casi, assicurarsi che l'analizzatore usato non filtri tali caratteri. L'analizzatore standard ignora molti caratteri speciali, esclusi dall'indice.In such cases, make sure that the analyzer you use does not filter those characters out. The standard analyzer bypasses many special characters, excluding them from your index.

Gli analizzatori che tokenize i caratteri speciali includono l'analizzatore "spazio", che prende in considerazione le sequenze di caratteri separate da spazi vuoti come token (pertanto la stringa "❤" verrebbe considerata un token).Analyzers that will tokenize special characters include the "whitespace" analyzer, which takes into consideration any character sequences separated by whitespaces as tokens (so the "❤" string would be considered a token). Inoltre, un analizzatore del linguaggio come Microsoft English Analyzer ("en. Microsoft") accetta la stringa "€" come token.Also, a language analyzer like the Microsoft English analyzer ("en.microsoft"), would take the "€" string as a token. È possibile testare un analizzatore per visualizzare i token generati per una query specifica.You can test an analyzer to see what tokens it generates for a given query.

Quando si usano i caratteri Unicode, assicurarsi che i simboli siano preceduti da un carattere di escape nell'URL della query (ad esempio per "❤" utilizzerà la sequenza di escape %E2%9D%A4+ ).When using Unicode characters, make sure symbols are properly escaped in the query url (for instance for "❤" would use the escape sequence %E2%9D%A4+). Postazione esegue automaticamente questa conversione.Postman does this translation automatically.

Precedenza (raggruppamento)Precedence (grouping)

È possibile usare le parentesi per creare sottoquery, inclusi gli operatori nell'istruzione tra parentesi.You can use parentheses to create subqueries, including operators within the parenthetical statement. Ad esempio, motel+(wifi|luxury) cercherà i documenti contenenti i termini "motel" e "wifi" o "luxury" (oppure entrambi).For example, motel+(wifi|luxury) will search for documents containing the "motel" term and either "wifi" or "luxury" (or both).

Il raggruppamento di campi è simile, ma definisce un singolo campo come ambito del raggruppamento.Field grouping is similar but scopes the grouping to a single field. Ad esempio, hotelAmenities:(gym+(wifi|pool)) cerca "gym" e "wifi" oppure "gym" e "pool" nel campo "hotelAmenities".For example, hotelAmenities:(gym+(wifi|pool)) searches the field "hotelAmenities" for "gym" and "wifi", or "gym" and "pool".

Limiti delle dimensioni delle queryQuery size limits

È previsto un limite per le dimensioni delle query che è possibile inviare al ricerca cognitiva di Azure.There is a limit to the size of queries that you can send to Azure Cognitive Search. In particolare, è possibile avere al massimo 1024 clausole (espressioni separate da AND, OR e così via).Specifically, you can have at most 1024 clauses (expressions separated by AND, OR, and so on). È previsto anche un limite di circa 32 KB per la dimensione di ogni singolo termine di una query.There is also a limit of approximately 32 KB on the size of any individual term in a query. Se l'applicazione genera query di ricerca a livello di codice, è consigliabile progettarla in modo che non generi query di dimensioni illimitate.If your application generates search queries programmatically, we recommend designing it in such a way that it does not generate queries of unbounded size.

Vedere ancheSee also