Azure Bilişsel Arama Lucene sorgu söz dizimiLucene query syntax in Azure Cognitive Search

Özelleştirilmiş sorgu formları için zengin Lucene sorgu ayrıştırıcı sözdizimine göre Azure bilişsel arama karşı sorgular yazabilirsiniz: joker karakter, benzer arama, yakınlık araması, normal ifadeler birkaç örnektir.You can write queries against Azure Cognitive Search based on the rich Lucene Query Parser syntax for specialized query forms: wildcard, fuzzy search, proximity search, regular expressions are a few examples. Lucene sorgu ayrıştırıcısı sözdiziminin büyük bir bölümü azure bilişsel arama 'da, Azure Bilişsel Arama tarafından $filter ifadelerle oluşturulan Aralık aramaları dışında bir şekilde uygulanır.Much of the Lucene Query Parser syntax is implemented intact in Azure Cognitive Search, with the exception of range searches which are constructed in Azure Cognitive Search through $filter expressions.

Tam ayrıştırma çağırmaHow to invoke full parsing

Hangi ayrıştırıcısının kullanılacağını belirtmek için queryType Search parametresini ayarlayın.Set the queryType search parameter to specify which parser to use. Geçerli değerler, varsayılan olarak simple ve Lucene için full simple|fulliçerir.Valid values include simple|full, with simple as the default, and full for Lucene.

Tam sözdizimini gösteren örnekExample showing full syntax

Aşağıdaki örnek, Lucene sorgu söz dizimini kullanarak dizindeki belgeleri bulur, queryType=full parametresinde yok edilecek.The following example finds documents in the index using the Lucene query syntax, evident in the queryType=full parameter. Bu sorgu, Kategori alanının "bütçe" terimini ve "son randevu" ifadesini içeren tüm aranabilir alanları içermesi halinde oteller döndürür.This query returns hotels where the category field contains the term "budget" and all searchable fields containing the phrase "recently renovated". "Son randevu" ifadesini içeren belgeler, artırma değeri (3) sonucu olarak daha yüksektir.Documents containing the phrase "recently renovated" are ranked higher as a result of the term boost value (3).

searchMode=all parametresi bu örnekle ilgilidir.The searchMode=all parameter is relevant in this example. Her operatör sorgu üzerinde olduğunda, ölçütlerin tümünün eşleştiğinden emin olmak için genellikle searchMode=all ayarlamanız gerekir.Whenever operators are on the query, you should generally set searchMode=all to ensure that all of the criteria is matched.

GET /indexes/hotels/docs?search=category:budget AND \"recently renovated\"^3&searchMode=all&api-version=2019-05-06&querytype=full

Alternatif olarak, POST 'u kullanın:Alternatively, use POST:

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

Daha fazla örnek için bkz. Lucene sorgu söz dizimi örnekleri Azure bilişsel arama 'de sorgu oluşturma.For additional examples, see Lucene query syntax examples for building queries in Azure Cognitive Search. Sorgu parametrelerinin tam olarak belirlenmesi hakkında daha fazla bilgi için bkz. arama belgeleri (Azure bilişsel arama REST API).For details about specifying the full contingent of query parameters, see Search Documents (Azure Cognitive Search REST API).

Not

Azure Bilişsel Arama basit sorgu söz diziminida destekler, basit ve güçlü bir sorgu dili, doğrudan anahtar sözcük araması için kullanılabilir.Azure Cognitive Search also supports Simple Query Syntax, a simple and robust query language that can be used for straightforward keyword search.

Sözdizimi temelleriSyntax fundamentals

Aşağıdaki sözdizimi temelleri, Lucene sözdizimini kullanan tüm sorgular için geçerlidir.The following syntax fundamentals apply to all queries that use the Lucene syntax.

Bağlamda işleç değerlendirmesiOperator evaluation in context

Yerleştirme, bir simgenin bir operatör ya da bir dizedeki yalnızca başka bir karakter olarak yorumlanıp yorumlanmadığını belirler.Placement determines whether a symbol is interpreted as an operator or just another character in a string.

Örneğin, Lucene Full sözdiziminde, hem belirsiz arama hem de yakınlık araması için tilde (~) kullanılır.For example, in Lucene full syntax, the tilde (~) is used for both fuzzy search and proximity search. Tırnak içine alınmış bir tümcecikden sonra yerleştirildiğinde,, yakınlık aramasını çağırır.When placed after a quoted phrase, ~ invokes proximity search. Bir terimin sonuna yerleştirildiğinde, belirsiz aramayı çağırır.When placed at the end of a term, ~ invokes fuzzy search.

"İş ~ analist" gibi bir dönem içinde, karakter bir işleç olarak değerlendirilmez.Within a term, such as "business~analyst", the character is not evaluated as an operator. Bu durumda, sorgunun bir terim veya tümcecik sorgusu olduğu varsayılırsa, sözcük temelli Analize sahip tam metin araması ,, ve "Business ~ analist" TERIMINI iki: iş veya analist olarak keser.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.

Yukarıdaki örnek, tilde (~), ancak aynı prensibi her operatör için geçerlidir.The example above is the tilde (~), but the same principle applies to every operator.

Özel karakterleri kaçışEscaping special characters

Arama metninin bir parçası olarak kullanılması için özel karakterlerin kaçışılması gerekir.Special characters must be escaped to be used as part of the search text. Üzerlerine ters eğik çizgiyle (\) ekleyerek bunları silebilirsiniz.You can escape them by prefixing them with backslash (\). Kaçışılması gereken özel karakterler şunlardır:Special characters that need to be escaped include the following:
+ - && || ! ( ) { } [ ] ^ " ~ * ? : \ /

Örneğin, bir joker karakteri atlamak için \*kullanın.For example, to escape a wildcard character, use \*.

URL 'lerde güvenli olmayan ve ayrılmış karakterleri kodlamaEncoding unsafe and reserved characters in URLs

Lütfen tüm güvenli olmayan ve ayrılmış karakterlerin bir URL 'de kodlandığını doğrulayın.Please ensure all unsafe and reserved characters are encoded in a URL. Örneğin, URL 'deki bir değer/bağlayıcı tanımlayıcısı olduğundan, ' # ' güvenli olmayan bir karakterdir.For example, '#' is an unsafe character because it is a fragement/anchor identifier in a URL. URL 'de kullanılıyorsa, karakterin %23 kodlanmalıdır.The character must be encoded to %23 if used in a URL. ' & ' ve ' = ', parametreleri sınırlandıran ve Azure Bilişsel Arama değerlerini belirten ayrılmış karakter örnekleridir.'&' and '=' are examples of reserved characters as they delimit parameters and specify values in Azure Cognitive Search. Daha fazla ayrıntı için lütfen bkz. rfc1738: Uniform Resource Konumlandırıcıları (URL) .Please see RFC1738: Uniform Resource Locators (URL) for more details.

Güvenli olmayan karakterler " ` < > # % { } | \ ^ ~ [ ].Unsafe characters are " ` < > # % { } | \ ^ ~ [ ]. Ayrılan karakterler ; / ? : @ = + &.Reserved characters are ; / ? : @ = + &.

Öncelik işleçleri: gruplandırma ve alan gruplamaPrecedence operators: grouping and field grouping

Parantez, parantez içinde işleç dahil olmak üzere alt sorgular oluşturmak için kullanabilirsiniz.You can use parentheses to create subqueries, including operators within the parenthetical statement. Örneğin, motel+(wifi||luxury) "Motel" terimini ve "WiFi" veya "merkezlerini" (ya da her ikisi) içeren belgeleri arayacak.For example, motel+(wifi||luxury) will search for documents containing the "motel" term and either "wifi" or "luxury" (or both).

Alan gruplama benzerdir, ancak gruplamayı tek bir alanla kapsamlara sahiptir.Field grouping is similar but scopes the grouping to a single field. Örneğin, hotelAmenities:(gym+(wifi||pool)) "Gym" ve "WiFi" veya "Gym" ve "havuz" için "hotelAmenities" alanını arar.For example, hotelAmenities:(gym+(wifi||pool)) searches the field "hotelAmenities" for "gym" and "wifi", or "gym" and "pool".

SearchMode parametresi konularıSearchMode parameter considerations

Azure bilişsel arama basit sorgu söz dizimibölümünde açıklandığı gibi sorgularda searchMode etkisi, Lucene sorgu söz dizimine eşit olarak uygulanır.The impact of searchMode on queries, as described in Simple query syntax in Azure Cognitive Search, applies equally to the Lucene query syntax. Yani, NOT işleci ile birlikte searchMode, parametresini nasıl ayarlayacaı üzerinde hiçbir görünmemeye açık olmadığınız takdirde alışılmadık görünebilir olabilecek sorgu sonuçları elde edebilir.Namely, searchMode in conjunction with NOT operators can result in query outcomes that might seem unusual if you aren't clear on the implications of how you set the parameter. Varsayılan, searchMode=anyve bir NOT işleci kullanıyorsanız, işlem bir veya eylem olarak hesaplanır, yani "New York" NOT "Seattle", Seattle olmayan tüm şehirleri döndürür.If you retain the default, searchMode=any, and use a NOT operator, the operation is computed as an OR action, such that "New York" NOT "Seattle" returns all cities that are not Seattle.

Boole işleçleri (ve, veya DEĞIL)Boolean operators (AND, OR, NOT)

Her zaman tüm büyük harf metin Boole işleçlerini (ve veya, DEĞIL) belirtin.Always specify text boolean operators (AND, OR, NOT) in all caps.

OR işleci OR veya ||OR operator OR or ||

OR işleci dikey bir çubuk veya boru karakterdir.The OR operator is a vertical bar or pipe character. Örneğin: wifi || luxury, "WiFi" veya "merkezlerini" ya da her ikisini de içeren belgeleri arayacak.For example: wifi || luxury will search for documents containing either "wifi" or "luxury" or both. YA da varsayılan bir bağlantılı operatör olduğundan, wifi luxury wifi || luxueryeşdeğerdir.Because OR is the default conjunction operator, you could also leave it out, such that wifi luxury is the equivalent of wifi || luxuery.

AND işleci AND, && veya +AND operator AND, && or +

AND işleci bir ve işareti ya da artı işareti.The AND operator is an ampersand or a plus sign. Örneğin: wifi && luxury hem "WiFi" hem de "merkezlerini" içeren belgeler için arama yapılır.For example: wifi && luxury will search for documents containing both "wifi" and "luxury". Plus karakteri (+) gerekli şartlar için kullanılır.The plus character (+) is used for required terms. Örneğin, +wifi +luxury her iki terim tek bir belge alanında bir yerde gözükmelidir.For example, +wifi +luxury stipulates that both terms must appear somewhere in the field of a single document.

İşleç NOT, ! veya - DEĞILNOT operator NOT, ! or -

NOT işleci bir ünlem işareti veya eksi işareti.The NOT operator is an exclamation point or the minus sign. Örneğin: wifi !luxury, "WiFi" terimine sahip olan ve/veya "merkezlerini" olmayan belgeleri arayacak.For example: wifi !luxury will search for documents that have the "wifi" term and/or do not have "luxury". searchMode seçeneği, bir + veya | | yokluğunda, NOT işleci olan bir terimin, sorgudaki diğer koşullara göre mi yoksa ORed mi olduğunu denetler. işlecinde.The searchMode option controls whether a term with the NOT operator is ANDed or ORed with the other terms in the query in the absence of a + or || operator. searchMode any(varsayılan) veya allolarak ayarlan, hatırlayın.Recall that searchMode can be set to either any(default) or all.

searchMode=any kullanmak, daha fazla sonuç ekleyerek sorguların geri çekmeyi artırır ve varsayılan olarak "veya NOT" olarak yorumlanır.Using searchMode=any increases the recall of queries by including more results, and by default - will be interpreted as "OR NOT". Örneğin, wifi -luxury, WiFi terimini içeren veya merkezlerini terimini içermeyen belgelerle eşleşir .For example, wifi -luxury will match documents that either contain the term wifi or those that do not contain the term luxury.

searchMode=all kullanmak, sorguların kesinliğini daha az sonuç ekleyerek artırır ve varsayılan olarak "ve NOT" olarak yorumlanır.Using searchMode=all increases the precision of queries by including fewer results, and by default - will be interpreted as "AND NOT". Örneğin wifi -luxury, wifi terimini içeren belgelerle eşleşir ve luxuryterimini içermez.For example, wifi -luxury will match documents that contain the term wifi and do not contain the term luxury. Bu,-işleci için daha sezgisel bir davranıştır.This is arguably a more intuitive behavior for the - operator. Bu nedenle, aramaları geri çağırmak yerine duyarlık için optimize etmek isterseniz ve kullanıcılarınız aramalardaki - işlecini kullanıyorsa, searchMode=any üzerinden searchMode=all seçmeyi düşünmelisiniz.Therefore, you should consider choosing searchMode=all over searchMode=any if you want to optimize searches for precision instead of recall and your users frequently use the - operator in searches.

Sorgu boyutu sınırlamalarıQuery size limitations

Azure Bilişsel Arama 'e gönderebilmeniz için sorguların boyutuyla ilgili bir sınır vardır.There is a limit to the size of queries that you can send to Azure Cognitive Search. Özellikle, en fazla 1024 yan tümce (ve, veya ile ayrılmış ifadeler) olabilir.Specifically, you can have at most 1024 clauses (expressions separated by AND, OR, and so on). Ayrıca, bir sorgudaki her bir terimin boyutunda yaklaşık 32 KB 'lik bir sınır vardır.There is also a limit of approximately 32 KB on the size of any individual term in a query. Uygulamanız program aracılığıyla arama sorguları oluşturursa, bu şekilde, sınırsız boyut sorguları oluşturmamasını sağlayan bir şekilde tasarlamayı öneririz.If your application generates search queries programmatically, we recommend designing it in such a way that it does not generate queries of unbounded size.

Puanlama joker karakteri ve Regex sorgularıScoring wildcard and regex queries

Azure Bilişsel Arama metin sorguları için sıklık tabanlı Puanlama (tf-ıDF) kullanır.Azure Cognitive Search uses frequency-based scoring (TF-IDF) for text queries. Bununla birlikte, koşulların kapsamını büyük olasılıkla geniş olabilecek bir joker karakter ve Regex sorguları için, derecelendirmenin, rarer terimleriyle eşleşmelerin eşleşmesini engellemek için sıklık faktörü yok sayılır.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. Tüm eşleşmeler joker ve Regex aramaları için eşit olarak değerlendirilir.All matches are treated equally for wildcard and regex searches.

Parçalı aramaFielded search

Arama ifadesinin tek bir sözcük veya tümcecik ya da parantez içinde daha karmaşık bir ifade ya da isteğe bağlı olarak Boolean işleçleriyle, fieldName:searchExpression sözdizimiyle bir ara değer arama işlemi tanımlayabilirsiniz.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. Bazı örnekler şunlardır:Some examples include the following:

  • Tarz: canot geçmişgenre:jazz NOT history

  • Sanatçılar:("mil Davis" "John Coltrane")artists:("Miles Davis" "John Coltrane")

Her iki dizenin tek bir varlık olarak değerlendirilmesini istiyorsanız, bu örnekte artists alanında iki ayrı sanatçıın aranmasına izin vermek için birden çok dizeyi tırnak işareti içine aldığınızdan emin olun.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.

fieldName:searchExpression belirtilen alan bir searchable alanı olmalıdır.The field specified in fieldName:searchExpression must be a searchable field. Dizin özniteliklerinin alan tanımlarında nasıl kullanıldığına ilişkin ayrıntılar için bkz. Dizin oluşturma .See Create Index for details on how index attributes are used in field definitions.

Not

Kullanılabilir arama ifadelerini kullanırken, her bir alan arama ifadesinde açık olarak belirtilmiş bir alan adı olduğundan searchFields parametresini kullanmanız gerekmez.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. Ancak, bazı parçaların belirli bir alan kapsamında bulunduğu bir sorgu çalıştırmak istiyorsanız searchFields parametresini kullanmaya devam edebilirsiniz ve REST çeşitli alanlara uygulanabilir.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. Örneğin, sorgu search=genre:jazz NOT history&searchFields=description jazz yalnızca genre alanı ile eşleşirken, description alanla NOT history eşleşecekti.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. fieldName:searchExpression ' de belirtilen alan adı her zaman searchFields parametresine göre önceliklidir. Bu örnekte, searchFields parametresine genre eklemesi gerekmez.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.

Benzer aramaFuzzy search

Benzer bir arama, benzer bir yapıya sahip olan hükümlerle eşleşmeleri bulur.A fuzzy search finds matches in terms that have a similar construction. Her Lucene belgesiiçin, belirsiz aramalar, dumerau-Pavenshtein mesafesinitemel alır.Per Lucene documentation, fuzzy searches are based on Damerau-Levenshtein Distance. Benzer aramalar, uzaklık ölçütlerine uyan en fazla 50 terim için bir dönemi genişletebilir.Fuzzy searches can expand a term up to the maximum of 50 terms that meet the distance criteria.

Benzer bir arama yapmak için, tek bir sözcüğün sonundaki tilde "~" sembolünü, isteğe bağlı bir parametreyle, 0 ile 2 (varsayılan) arasında, düzenleme uzaklığını belirten bir sayı kullanın.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. Örneğin, "mavi ~" veya "mavi ~ 1", "mavi", "maves" ve "tutkalla" döndürür.For example, "blue~" or "blue~1" would return "blue", "blues", and "glue".

Benzer arama yalnızca koşullara uygulanabilir, tümceciklere uygulanamaz, ancak her terime bir çok parçalı ad veya ifade içinde her bir terime ekleyebilirsiniz.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. Örneğin, "Unviersty ~ of ~" Wshington ~ "," University of Washington "ile eşleşir.For example, "Unviersty~ of~ "Wshington~" would match on "University of Washington".

Yakınlık aramasıProximity search

Yakınlık aramaları, bir belgedeki birbirini yakın terimleri bulmak için kullanılır.Proximity searches are used to find terms that are near each other in a document. Bir ifadenin sonuna, ardından yakınlık sınırını oluşturan sözcüklerin sayısını içeren bir tilde "~" simgesi ekleyin.Insert a tilde "~" symbol at the end of a phrase followed by the number of words that create the proximity boundary. Örneğin "hotel airport"~5, bir belgede "otel" ve "Havaalanı" terimlerini bir belgedeki 5 sözcükten sonra bulur.For example, "hotel airport"~5 will find the terms "hotel" and "airport" within 5 words of each other in a document.

Terim artırmaTerm boosting

Terim artırma, bir belgeyi, süresi içermeyen belgelere göre, daha yüksek bir dönem içeriyorsa bir belgenin derecelendirdiğini ifade eder.Term boosting refers to ranking a document higher if it contains the boosted term, relative to documents that do not contain the term. Bu, Puanlama profillerindeki Puanlama profillerinin belirli koşullar yerine belirli alanları arttırma açısından farklılık gösterir.This differs from scoring profiles in that scoring profiles boost certain fields, rather than specific terms.

Aşağıdaki örnek, farkları göstermeye yardımcı olur.The following example helps illustrate the differences. Belirli bir alanda eşleşen bir Puanlama profili olduğunu, müzik \ dizin örneğindede tarzı söylediğini varsayalım.Suppose that there's a scoring profile that boosts matches in a certain field, say genre in the musicstoreindex example. Belirli arama terimlerini diğerlerinden daha fazla artırmak için kullanım süresi kullanılabilir.Term boosting could be used to further boost certain search terms higher than others. Örneğin, rock^2 electronic, tarzdaki arama terimlerini, dizindeki diğer aranabilir alanlardan daha yüksek olan belgeleri artırır.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. Ayrıca, arama terimini içeren belgeler, diğer arama teriminden daha yüksek olarak derecelendirilir ( 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).

Bir terimi artırmak için, aradığınız terimin sonundaki "^" giriş işaretini, bir artırma faktörü (bir sayı) ile simge kullanın.To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. Ayrıca tümcecikleri de kullanabilirsiniz.You can also boost phrases. Yükseltme faktörü arttıkça, terim diğer arama koşullarına göre daha ilgili olacaktır.The higher the boost factor, the more relevant the term will be relative to other search terms. Varsayılan olarak, Boost faktörü 1 ' dir.By default, the boost factor is 1. Boost faktörü pozitif olmalıdır, ancak 1 ' den az olabilir (örneğin, 0,20).Although the boost factor must be positive, it can be less than 1 (for example, 0.20).

Normal ifade aramaRegular expression search

Normal ifade araması, RegExp sınıfındabelgelendiği gibi eğik çizgi "/" arasındaki içeriğe dayalı bir eşleşme bulur.A regular expression search finds a match based on the contents between forward slashes "/", as documented in the RegExp class.

Örneğin, "Motel" veya "otel" içeren belgeleri bulmak için /[mh]otel/belirtin.For example, to find documents containing "motel" or "hotel", specify /[mh]otel/. Normal ifade aramaları tek sözcüklerle eşleştirilir.Regular expression searches are matched against single words.

Joker karakter aramaWildcard search

Birden çok (*) veya tek (?) karakterli joker karakter aramaları için genellikle tanınan sözdizimini kullanabilirsiniz.You can use generally recognized syntax for multiple (*) or single (?) character wildcard searches. Lucene sorgu ayrıştırıcısının, bu sembollerin tek bir terim ve tümcecik değil, kullanımını desteklediği unutulmamalıdır.Note the Lucene query parser supports the use of these symbols with a single term, and not a phrase.

Örneğin, "Not" ("Not defteri" veya "Not defteri" gibi "Not" önekiyle birlikte kelimeleri içeren belgeleri bulmak için "Not *" değerini belirtin.For example, to find documents containing the words with the prefix "note", such as "notebook" or "notepad", specify "note*".

Not

* Veya? kullanamazsınızYou cannot use a * or ? bir aramanın ilk karakteri olarak sembol.symbol as the first character of a search.
Joker karakter arama sorgularında metin analizi yapılmaz.No text analysis is performed on wildcard search queries. Sorgu zamanında, joker karakter sorgu terimleri arama dizininde analiz edilen koşullara göre karşılaştırılır ve genişletilir.At query time, wildcard query terms are compared against analyzed terms in the search index and expanded.

Ayrıca bkz.See also