Esempi di sintassi di query Lucene per la creazione di query in Ricerca di AzureLucene query syntax examples for building queries in Azure Search

Quando si creano query per Ricerca di Azure, è possibile usare la sintassi di query semplice predefinita o il parser di query Lucene in Ricerca di Azure.When constructing queries for Azure Search, you can use either the default simple query syntax or the alternative Lucene Query Parser in Azure Search. Il parser di query Lucene supporta costrutti di query più complessi, ad esempio le query con ambito campo, ricerca fuzzy, ricerca di prossimità, aumento priorità dei termini e ricerca di espressioni regolari.The Lucene Query Parser supports more complex query constructs, such as field-scoped queries, fuzzy search, proximity search, term boosting, and regular expression search.

In questo articolo vengono illustrati esempi di operazioni di query disponibili quando si usa la sintassi completa.In this article, you can step through examples demonstrating query operations available when using the full syntax.

Visualizzazione degli esempi in JSFiddleViewing the examples in JSFiddle

Tutti gli esempi in questo articolo sono esempi di query eseguibili che vengono eseguite su un indice di ricerca precaricato in JSFiddle, un editor di codice online per lo script di test e HTML.All of the examples in this article are executable queries that run against a pre-loaded Search index in JSFiddle, an online code editor for testing script and HTML.

Per eseguirle fare clic con il pulsante destro del mouse sugli URL degli esempi di query per aprire JSFiddle in un'altra finestra del browser.To run them, right-click on the query example URLs to open JSFiddle in a separate browser window.

Nota

Gli esempi seguenti sfruttano un indice di ricerca costituito da processi disponibili in base a un set di dati fornito tramite l'iniziativa City of New York OpenData .The following examples leverage a search index consisting of jobs available based on a dataset provided by the City of New York OpenData initiative. Questi dati non devono essere considerati attuali o completi.This data should not be considered current or complete. L'indice è un servizio sandbox fornito da Microsoft.The index is on a sandbox service provided by Microsoft. Non è necessaria una sottoscrizione di Azure o Ricerca di Azure per provare queste query.You do not need an Azure subscription or Azure Search to try these queries.

Come richiamare l'analisi completa di LuceneHow to invoke full Lucene parsing

Tutti gli esempi in questo articolo specificano il parametro di ricerca queryType=full, che indica che la sintassi completa viene gestita dal parser di query Lucene.All of the examples in this article specify the queryType=full search parameter, indicating that the full syntax is handled by the Lucene Query Parser.

Esempio 1 : fare clic con il pulsante destro del mouse sul frammento di query seguente per aprirlo in una nuova pagina del browser che carica JSFiddle ed esegue la query:Example 1 -- Right-click the following query snippet to open it in a new browser page that loads JSFiddle and runs the query:

Nella nuova finestra del browser il codice di origine Javascript e l'output HTML sono affiancati.In the new browser window, the JavaScript source and HTML output are presented side by side. Lo script fa riferimento a una query completa, non al solo frammento di codice, come illustrato nel collegamento.The script references a full query (not just the snippet, as shown in the link). La query completa è illustrata negli URL di ogni esempio.The full query is shown in the URLs for each example.

Questa query restituisce documenti dall'indice delle offerte di lavoro della città di New York, ovvero nycjobs caricato in un servizio sandbox.This query returns documents from our New York City Jobs index (nycjobs, loaded on a sandbox service). Per ragioni di brevità, la query specifica che vengono restituiti solo i titoli aziendali.For brevity, the query specifies only business titles are returned. La query sottostante completa è la seguente:The full underlying query is as follows:

http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2016-09-01%26searchFields=business_title%26$select=business_title%26queryType=full%26search=*

Il parametro searchFields limita la ricerca al solo campo della qualifica professionale (business_title).The searchFields parameter restricts the search to just the business title field. queryType è impostato su full, pertanto Ricerca di Azure usa il parser di query Lucene per eseguire la query.The queryType is set to full, which instructs Azure Search to use the Lucene Query Parser for this query.

Nota

Per informazioni di base sull'elaborazione di query, vedere Funzionamento della ricerca full-text in Ricerca di Azure.For background on query processing, see How full text search works in Azure Search. Per altre informazioni sui parametri di ricerca, vedere Search Documents (Azure Search Service REST API) (Documenti di ricerca: API REST del servizio Ricerca di Azure).For more information on search parameters, see Search Documents (Azure Search Service REST API).

Operazione di query con campoFielded query operation

È possibile modificare gli esempi dell'articolo specificando una costruzione nomecampo:terminericerca per definire un'operazione query con campo, dove il campo è una singola parola e anche il termine di ricerca è una singola parola o una frase, che può includere operatori booleani.You can modify the examples in this article by specifying a fieldname:searchterm construction to define a fielded query operation, where the field is a single word, and the search term is also a single word or a phrase, optionally with Boolean operators. Ecco alcuni esempi:Some examples include the following:

  • business_title:(senior NOT junior)business_title:(senior NOT junior)
  • state:("New York" AND "New Jersey")state:("New York" AND "New Jersey")

Assicurarsi di inserire più stringhe racchiuse tra virgolette se si vuole che entrambe le stringhe siano valutate come una singola entità, come in questo caso per la ricerca di due città distinte nel campo "location".Be sure to put multiple strings within quotation marks if you want both strings to be evaluated as a single entity, as in this case searching for two distinct cities in the location field. Assicurarsi anche che l'operatore sia in lettere maiuscole, come NOT e AND.Also, ensure the operator is capitalized as you see with NOT and AND.

Il campo specificato in nomecampo:terminericerca deve essere un campo ricercabile.The field specified in fieldname:searchterm must be a searchable field. Per informazioni dettagliate sull'uso di attributi dell'indice nelle definizioni campo, vedere Creare l'indice (API REST del servizio Ricerca di Azure) .See Create Index (Azure Search Service REST API) for details on how index attributes are used in field definitions.

Esempio 2: fare clic con il pulsante destro del mouse sul frammento di query seguente. Questa query cerca titoli aziendali che contengono il termine senior ma non junior:Example 2 -- Right-click the following query snippet This query searches for business titles with the term senior in them, but not junior:

Esempio di ricerca fuzzyFuzzy search example

Una ricerca fuzzy trova le corrispondenze in termini che hanno una costruzione simile.A fuzzy search finds matches in terms that have a similar construction. Secondo la documentazione di Lucene, le ricerche fuzzy si basano sulla distanza di Damerau-Levenshtein.Per Lucene documentation, fuzzy searches are based on Damerau-Levenshtein Distance.

Per eseguire una ricerca fuzzy, aggiungere il simbolo tilde "~" alla fine di una parola con un parametro facoltativo, un valore compreso tra 0 e 2, che specifica la distanza di edit.To do a fuzzy search, append the tilde "~" symbol at the end of a single word with an optional parameter, a value between 0 and 2, that specifies the edit distance. Ad esempio, "blue~" or "blue~1" restituirà blue, blues e glue.For example, "blue~" or "blue~1" would return blue, blues, and glue.

Esempio 3 : fare clic con il pulsante destro del mouse sul frammento di query seguente.Example 3 -- Right-click the following query snippet. Questa query cerca i processi con il termine associate, che non è scritto correttamente:This query searches for jobs with the term associate (where it is misspelled):

Nota

Le query fuzzy non vengono analizzate, il che può sorprendere se si prevede lo stemming o la lemmatizzazione.Fuzzy queries are not analyzed, which can be surprising if you expect stemming or lemmatization. L'analisi lessicale viene eseguita solo su termini completi, la query di un termine o di una locuzione.Lexical analysis is only performed on complete terms (a term query or phrase query). I tipi di query con termini incompleti, ad esempio query di prefisso, di caratteri jolly, di espressioni regolari, fuzzy, vengono aggiunte direttamente alla struttura della query, ignorando la fase di analisi.Query types with incomplete terms (prefix query, wildcard query, regex query, fuzzy query) are added directly to the query tree, bypassing the analysis stage. L'unica trasformazione eseguita per i termini di una query incompleta è la conversione in lettere minuscole.The only transformation performed on incomplete query terms is lowercasing.

Esempio di ricerca per prossimitàProximity search example

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.

Esempio 4 : fare clic con il pulsante destro del mouse sulla query.Example 4 -- Right-click the query. Ricerca processi con il termine "senior analyst" separato da non più di una parola:Search for jobs with the term "senior analyst" where it is separated by no more than one word:

Esempio 5 : ricerca le ricorrenze in cui "senior analyst" non è separato da nessuna parola.Example 5 -- Try it again removing the words between the term "senior analyst".

Esempi di aumento della priorità dei terminiTerm boosting examples

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.

Considerare un profilo di punteggio che migliora le corrispondenze in un determinato campo, ad esempio genre (genere) nell'esempio musicstoreindex.Consider a scoring profile that boosts matches in a certain field, such as 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 il valore di priorità del termine (2).Furthermore, 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. 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,2).Although the boost factor must be positive, it can be less than 1 (for example, 0.2).

Esempio 6: fare clic con il pulsante destro del mouse sulla query.Example 6 -- Right-click the query. Cercare processi con il termine "computer analyst" per cui non sono presenti risultati con entrambe le parole computer e analyst, anche se all'inizio dei risultati sono presenti processi che contengono analyst.Search for jobs with the term "computer analyst" where we see there are no results with both words computer and analyst, yet analyst jobs are at the top of the results.

Esempio 7: provare di nuovo, questa volta aumentando la priorità dei risultati con il termine computer rispetto al termine analyst, se non esiste nessuna delle due parole.Example 7 -- Try it again, this time boosting results with the term computer over the term analyst if both words do not exist.

Esempio di espressione regolareRegular expression example

Una ricerca con espressione regolare trova una corrispondenza in base al contenuto incluso tra le barre "/", come indicato nella classe RegExp.A regular expression search finds a match based on the contents between forward slashes "/", as documented in the RegExp class.

Esempio 8 : fare clic con il pulsante destro del mouse sulla query.Example 8 -- Right-click the query. Cercare i processi con il termine Senior o Junior.Search for jobs with either the term Senior or Junior.

  • &queryType=full&$select=business_title&search=business_title:/(Sen|Jun)ior/

L'URL per questo esempio non visualizza correttamente la pagina.The URL for this example will not render properly in the page. Come soluzione alternativa, copiare l'URL seguente e incollarlo nell'indirizzo URL del browser: http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2016-09-01%26queryType=full%26$select=business_title%26search=business_title:/(Sen|Jun)ior/)As a workaround, copy the URL below and paste it into the browser URL address: http://fiddle.jshell.net/liamca/gkvfLe6s/1/?index=nycjobs&apikey=252044BE3886FE4A8E3BAA4F595114BB&query=api-version=2016-09-01%26queryType=full%26$select=business_title%26search=business_title:/(Sen|Jun)ior/)

Esempio di ricerca con caratteri jollyWildcard search example

È possibile usare una sintassi generalmente riconosciuta per ricerche con caratteri jolly per trovare più caratteri (*) o un singolo carattere (?).You can use generally recognized syntax for multiple (*) or single (?) character wildcard searches. 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.

Esempio 9: fare clic con il pulsante destro del mouse sulla query.Example 9 -- Right-click the query. Cercare processi contenenti il prefisso 'prog' che includerà business_title con i termini programming e programmer.Search for jobs that contain the prefix 'prog' which would include business titles with the terms programming and programmer in it.

Non è possibile usare un carattere * o ?You cannot use a * or ? come primo carattere di una ricerca.symbol as the first character of a search.

Passaggi successiviNext steps

Provare a specificare il parser di query Lucene nel codice.Try specifying the Lucene Query Parser in your code. I collegamenti seguenti illustrano come configurare le query di ricerca per .NET e l'API REST.The following links explain how to set up search queries for both .NET and the REST API. I collegamenti usano la sintassi semplice predefinita, quindi è necessario applicare quanto appreso in questo articolo per specificare il parametro queryType.The links use the default simple syntax so you will need to apply what you learned from this article to specify the queryType.

Vedere ancheSee also

Funzionamento della ricerca full-text in Ricerca di AzureHow full text search works in Azure Search