Sintaxe de consulta Lucene no Azure Pesquisa CognitivaLucene query syntax in Azure Cognitive Search

Ao criar consultas, você pode optar pela sintaxe do analisador de consulta do Lucene para formulários de consulta especializados: curinga, pesquisa difusa, pesquisa por proximidade, expressões regulares.When creating queries, you can opt for the Lucene Query Parser syntax for specialized query forms: wildcard, fuzzy search, proximity search, regular expressions. Grande parte da sintaxe do analisador de consulta Lucene é implementada intacta no Azure pesquisa cognitiva, com exceção das pesquisas de intervalo que são construídas por meio de $filter expressões.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.

Para usar a sintaxe Lucene completa, você definirá o QueryType como "Full" e passará uma expressão de consulta padronizada para curinga, pesquisa difusa ou um dos outros formulários de consulta com suporte na sintaxe completa.To use full Lucene syntax, you'll set the queryType to "full" and pass in a query expression patterned for wildcard, fuzzy search, or one of the other query forms supported by the full syntax. Em repouso, as expressões de consulta são fornecidas no search parâmetro de uma solicitação de documentos de pesquisa (API REST) .In REST, query expressions are provided in the search parameter of a Search Documents (REST API) request.

Exemplo (sintaxe completa)Example (full syntax)

O exemplo a seguir é uma solicitação de pesquisa construída usando a sintaxe completa.The following example is a search request constructed using the full syntax. Este exemplo específico mostra a pesquisa em campo e o aumento de termos.This particular example shows in-field search and term boosting. Ele procura Hotéis em que o campo categoria contém o termo "orçamento".It looks for hotels where the category field contains the term "budget". Todos os documentos que contêm a frase "recentemente renovados" são classificados como um resultado do valor de aumento de termo (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"
}

Embora não seja específico para qualquer tipo de consulta, o searchMode parâmetro é relevante neste exemplo.While not specific to any query type, the searchMode parameter is relevant in this example. Sempre que os operadores estiverem na consulta, geralmente você deve definir searchMode=all para garantir que todos os critérios sejam correspondidos.Whenever operators are on the query, you should generally set searchMode=all to ensure that all of the criteria is matched.

Para obter exemplos adicionais, consulte exemplos de sintaxe de consulta Lucene.For additional examples, see Lucene query syntax examples. Para obter detalhes sobre a solicitação de consulta e os parâmetros, incluindo searchmode, consulte Pesquisar documentos (API REST).For details about the query request and parameters, including searchMode, see Search Documents (REST API).

Conceitos básicos da sintaxeSyntax fundamentals

Os conceitos básicos de sintaxe a seguir se aplicam a todas as consultas que usam a sintaxe do Lucene.The following syntax fundamentals apply to all queries that use the Lucene syntax.

Avaliação de operador no contextoOperator evaluation in context

O posicionamento determina se um símbolo é interpretado como um operador ou apenas outro caractere em uma cadeia de caracteres.Placement determines whether a symbol is interpreted as an operator or just another character in a string.

Por exemplo, na sintaxe completa do Lucene, o til (~) é usado na busca difusa e na pesquisa de proximidade.For example, in Lucene full syntax, the tilde (~) is used for both fuzzy search and proximity search. Quando colocado depois de uma frase entre aspas, invoca a procura por proximidade.When placed after a quoted phrase, ~ invokes proximity search. Quando colocado no final de um termo, o ~ invoca a pesquisa difusa.When placed at the end of a term, ~ invokes fuzzy search.

Dentro de um termo, como "analista~de~negócios", o caractere não é avaliado como um operador.Within a term, such as "business~analyst", the character is not evaluated as an operator. Nesse caso, supondo que a consulta seja um termo ou uma consulta de frase, a pesquisa de texto completo com análise léxica retira o ~ e divide o termo "analista~de~negócios" em dois: analista OU negócios.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.

O exemplo acima usa o til (~), mas o mesmo princípio se aplica a todos os operadores.The example above is the tilde (~), but the same principle applies to every operator.

Caracteres especiais de escapeEscaping special characters

Para usar qualquer um dos operadores de pesquisa como parte do texto de pesquisa, escape o caractere prefixando-o com uma barra invertida única ( \ ).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 (\). Por exemplo, para uma pesquisa de curinga em https:// , em que :// é parte da cadeia de caracteres de consulta, você especificaria search=https\:\/\/* .For example, for a wildcard search on https://, where :// is part of the query string, you would specify search=https\:\/\/*. Da mesma forma, um padrão de número de telefone de escape pode ser assim \+1 \(800\) 642\-7676 .Similarly, an escaped phone number pattern might look like this \+1 \(800\) 642\-7676.

Os caracteres especiais que exigem escape incluem o seguinte:Special characters that require escaping include the following:
+ - & | ! ( ) { } [ ] ^ " ~ * ? : \ /

Observação

Embora o escape Mantenha os tokens juntos, a análise léxica durante a indexação pode distribuí-los. Por exemplo, o analisador Lucene padrão irá quebrar palavras em hifens, espaços em branco e outros caracteres.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 você precisar de caracteres especiais na cadeia de caracteres de consulta, talvez seja necessário um analisador que os preserve no índice.If you require special characters in the query string, you might need an analyzer that preserves them in the index. Algumas opções incluem analisadores de idiomanatural da Microsoft, que preservam palavras hifenizadas ou um analisador personalizado para padrões mais complexos.Some choices include Microsoft natural language analyzers, which preserves hyphenated words, or a custom analyzer for more complex patterns. Para obter mais informações, consulte termos parciais, padrões e caracteres especiais.For more information, see Partial terms, patterns, and special characters.

Codificação de caracteres reservados e não seguros em URLsEncoding unsafe and reserved characters in URLs

Verifique se todos os caracteres reservados e não seguros estão codificados em uma URL.Please ensure all unsafe and reserved characters are encoded in a URL. Por exemplo, ' # ' é um caractere não seguro porque é um identificador de fragmento/âncora em uma URL.For example, '#' is an unsafe character because it is a fragment/anchor identifier in a URL. O caractere deverá ser codificado como %23 se for usado em uma URL.The character must be encoded to %23 if used in a URL. ' & ' e ' = ' são exemplos de caracteres reservados à medida que delimitam parâmetros e especificam valores na Pesquisa Cognitiva do Azure.'&' and '=' are examples of reserved characters as they delimit parameters and specify values in Azure Cognitive Search. Consulte RFC1738: Uniform Resource Locators (URL) para obter mais detalhes.Please see RFC1738: Uniform Resource Locators (URL) for more details.

Os caracteres não seguros são " ` < > # % { } | \ ^ ~ [ ].Unsafe characters are " ` < > # % { } | \ ^ ~ [ ]. Os caracteres reservados são ; / ? : @ = + &.Reserved characters are ; / ? : @ = + &.

Operadores boolianosBoolean operators

Você pode inserir operadores boolianos em uma cadeia de caracteres de consulta para melhorar a precisão de uma correspondência.You can embed Boolean operators in a query string to improve the precision of a match. A sintaxe completa dá suporte a operadores de texto, além de operadores de caracteres.The full syntax supports text operators in addition to character operators. Sempre especifique operadores boolianos de texto (AND, OR, NOT) com tudo em maiúsculas.Always specify text boolean operators (AND, OR, NOT) in all caps.

Operador de textoText operator CaractereCharacter ExemploExample UsoUsage
ANDAND &, +&, + wifi + luxury Especifica os termos que uma correspondência deve conter.Specifies terms that a match must contain. No exemplo, o mecanismo de consulta procurará documentos que contenham wifi e luxury .In the example, the query engine will look for documents containing both wifi and luxury. O caractere de adição ( + ) é usado para os termos necessários.The plus character (+) is used for required terms. Por exemplo, +wifi +luxury estipula que os dois termos devem aparecer em algum lugar no campo de um único documento.For example, +wifi +luxury stipulates that both terms must appear somewhere in the field of a single document.
OUOR | wifi | luxury Localiza uma correspondência quando um dos termos é encontrado.Finds a match when either term is found. No exemplo, o mecanismo de consulta retornará a correspondência em documentos que contenham um wifi ou luxury ambos.In the example, the query engine will return match on documents containing either wifi or luxury or both. Porque OR é o operador de conjunção padrão, que também pode ser deixado de fora, de modo que wifi luxury é o equivalente de 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 Retorna correspondências em documentos que excluem o termo.Returns matches on documents that exclude the term. Por exemplo, o wifi –luxury pesquisará documentos que têm o wifi termo, mas não luxury .For example, wifi –luxury will search for documents that have the wifi term but not luxury.

O searchMode parâmetro em uma solicitação de consulta controla se um termo com o operador NOT é ANDed ou orns com outros termos na consulta (supondo que não haja nenhum + | operador OR nos outros termos).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). Os valores válidos incluem any ou all.Valid values include any or all.

searchMode=any aumenta a recall de consultas, incluindo mais resultados e, por padrão, - será interpretado como "ou não".searchMode=any increases the recall of queries by including more results, and by default - will be interpreted as "OR NOT". Por exemplo, wifi -luxury corresponderá a documentos que contêm o termo wifi ou aqueles que não contêm o termo 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 a precisão das consultas, incluindo menos resultados e, por padrão, será interpretado como "e não".searchMode=all increases the precision of queries by including fewer results, and by default - will be interpreted as "AND NOT". Por exemplo, wifi -luxury corresponderá a documentos que contêm o termo wifi e não contêm o termo "luxo".For example, wifi -luxury will match documents that contain the term wifi and do not contain the term "luxury". Esse é indiscutivelmente um comportamento mais intuitivo para o operador -.This is arguably a more intuitive behavior for the - operator. Portanto, você deve considerar searchMode=all o uso do em vez de searchMode=any se deseja otimizar as pesquisas de precisão em vez de recall, e os usuários frequentemente usam o - operador em pesquisas.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.

Ao decidir sobre uma searchMode configuração, considere os padrões de interação do usuário para consultas em vários aplicativos.When deciding on a searchMode setting, consider the user interaction patterns for queries in various applications. Os usuários que estão pesquisando informações têm mais probabilidade de incluir um operador em uma consulta, em oposição aos sites de comércio eletrônico que têm estruturas de navegação mais internas.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.

Você pode definir uma operação de pesquisa em campo com a fieldName:searchExpression sintaxe, em que a expressão de pesquisa pode ser uma única palavra ou frase, ou uma expressão mais complexa entre parênteses, opcionalmente com operadores boolianos.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. Alguns exemplos incluem o seguinte:Some examples include the following:

  • gênero:jazz NÃO históricogenre:jazz NOT history

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

Coloque várias cadeias de caracteres entre aspas se quiser que ambas cadeias de caracteres sejam avaliadas como uma única entidade, como neste caso, pesquisar duas cidades distintas no 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.

O campo especificado em fieldName:searchExpression deve ser um campo searchable.The field specified in fieldName:searchExpression must be a searchable field. Confira Criar Índice para obter detalhes sobre como os atributos de índice são usados em definições de campo.See Create Index for details on how index attributes are used in field definitions.

Observação

Ao usar expressões de pesquisa em campo, você não precisa usar o searchFields parâmetro porque cada expressão de pesquisa em campo tem um nome de campo especificado explicitamente.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. No entanto, você ainda poderá usar o searchFields parâmetro se quiser executar uma consulta em que algumas partes têm o escopo de um campo específico, e o restante pode se aplicar a vários campos.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. Por exemplo, a consulta search=genre:jazz NOT history&searchFields=description corresponderia jazz apenas ao genre campo, enquanto ela corresponderia ao 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. O nome do campo fornecido em fieldName:searchExpression sempre tem precedência sobre o searchFields parâmetro, que é o motivo neste exemplo, não precisamos incluir genre no searchFields parâmetro.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.

Uma pesquisa difusa localiza correspondências em termos que têm uma construção semelhante, expandindo um termo até o máximo de 50 termos que atendem aos critérios de distância de dois ou menos.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. Para obter mais informações, consulte pesquisa difusa.For more information, see Fuzzy search.

Para fazer uma pesquisa difusa, use o símbolo til "~" no final de uma única palavra com um parâmetro opcional, um número entre 0 e 2 (padrão), que especifica a distância de edição.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. Por exemplo, "mar~" ou "mar~1" retornaria "mar", "amar" e "maré".For example, "blue~" or "blue~1" would return "blue", "blues", and "glue".

A pesquisa difusa só pode ser aplicada a termos, não a frases, mas você pode acrescentar o til a cada termo individualmente em um nome ou frase de várias partes.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. Por exemplo, "Unviersty ~ de ~" Wshington ~ "corresponderia em" University de Washington ".For example, "Unviersty~ of~ "Wshington~" would match on "University of Washington".

As pesquisas de proximidade são usadas para localizar termos que estejam próximos um do outro em um documento.Proximity searches are used to find terms that are near each other in a document. Insira um símbolo til "~" no final de uma frase seguida pelo número de palavras que criam o limite de proximidade.Insert a tilde "~" symbol at the end of a phrase followed by the number of words that create the proximity boundary. Por exemplo, "hotel airport"~5 encontrará os termos "hotel" e "aeroporto" em cinco palavras uma da outra em um documento.For example, "hotel airport"~5 will find the terms "hotel" and "airport" within 5 words of each other in a document.

Aumento de termosTerm boosting

O aumento de termos refere-se ao aumento da classificação de um documento caso ele contenha o termo aumentado, em relação aos documentos que não contêm o termo.Term boosting refers to ranking a document higher if it contains the boosted term, relative to documents that do not contain the term. Isso é diferente dos perfis de pontuação, já que os perfis de pontuação aumentam determinados campos, em vez de termos específicos.This differs from scoring profiles in that scoring profiles boost certain fields, rather than specific terms.

O exemplo a seguir ajuda a ilustrar as diferenças.The following example helps illustrate the differences. Considere um perfil de pontuação que aumente as correspondências em um determinado campo, como gênero no exemplo de índice de loja de música.Suppose that there's a scoring profile that boosts matches in a certain field, say genre in the musicstoreindex example. O aumento de termos pode ser usado para melhorar a posição de determinados termos de pesquisa.Term boosting could be used to further boost certain search terms higher than others. Por exemplo, rock^2 electronic aumentará os documentos que contêm os termos de pesquisa no campo gênero, à frente de outros campos pesquisáveis no índice.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. Além disso, os documentos com o termo de pesquisa rock serão mais bem classificados do que o outro termo de pesquisa eletrônico como resultado do valor de aumento de termo (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).

Para aumentar um termo, use o sinal de interpolação, "^", com um fator de aumento (um número) no final do termo que você está pesquisando.To boost a term use the caret, "^", symbol with a boost factor (a number) at the end of the term you are searching. Você também pode aumentar as frases.You can also boost phrases. Quanto maior o fator de aumento, mais relevante será o termo em relação a outros termos de pesquisa.The higher the boost factor, the more relevant the term will be relative to other search terms. Por padrão, o fator de aumento é 1.By default, the boost factor is 1. Embora o fator de aumento deva ser positivo, ele pode ser menor do que 1 (por exemplo, 0,20).Although the boost factor must be positive, it can be less than 1 (for example, 0.20).

Uma pesquisa de expressão regular localiza uma correspondência com base em padrões que são válidos no Apache Lucene, conforme documentado na classe RegExp.A regular expression search finds a match based on patterns that are valid under Apache Lucene, as documented in the RegExp class. No Azure Pesquisa Cognitiva, uma expressão regular é colocada entre barras invertidas / .In Azure Cognitive Search, a regular expression is enclosed between forward slashes /.

Por exemplo, para localizar documentos que contenham "motel" ou "hotel", especifique /[mh]otel/.For example, to find documents containing "motel" or "hotel", specify /[mh]otel/. As pesquisas com expressões regulares são comparadas com palavras individuais.Regular expression searches are matched against single words.

Algumas ferramentas e linguagens impõem requisitos adicionais de caractere de escape.Some tools and languages impose additional escape character requirements. Para o JSON, as cadeias de caracteres que incluem uma barra invertida são repassadas com uma barra invertida: "microsoft.com/azure/" torna-se search=/.*microsoft.com\/azure\/.*/ o local onde search=/.* <string-placeholder>.*/ o configura a expressão regular e microsoft.com\/azure\/ é a cadeia de caracteres com uma barra de 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.

Você pode usar a sintaxe geralmente reconhecida para várias * pesquisas de curinga de caractere () ou única ( ? ).You can use generally recognized syntax for multiple (*) or single (?) character wildcard searches. Por exemplo, uma expressão de consulta de search=alpha* retorna "alfanumérico" ou "alfabética".For example, a query expression of search=alpha* returns "alphanumeric" or "alphabetical". Observe que o analisador de consulta Lucene oferece suporte ao uso desses símbolos com um único termo e não uma frase.Note the Lucene query parser supports the use of these symbols with a single term, and not a phrase.

A sintaxe Lucene completa dá suporte à correspondência de prefixo, infixo e sufixo.Full Lucene syntax supports prefix, infix, and suffix matching. No entanto, se tudo o que você precisa é de correspondência de prefixo, você pode usar a sintaxe simples (a correspondência de prefixo tem suporte em ambos).However, if all you need is prefix matching, you can use the simple syntax (prefix matching is supported in both).

A correspondência de sufixo, onde * ou ? precede a cadeia de caracteres (como em search=/.*numeric./ ) ou a correspondência de infixos requer a sintaxe Lucene completa, bem como os delimitadores de barra da expressão regular / .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. Não é possível usar um símbolo * ou ?You cannot use a * or ? símbolo como o primeiro caractere de um termo ou dentro de um termo, sem o / .symbol as the first character of a term, or within a term, without the /.

Observação

Como regra, a correspondência de padrões é lenta, portanto, talvez você queira explorar métodos alternativos, como a geração de tokens de n-grama de borda, que cria tokens para sequências de caracteres em um termo.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. O índice será maior, mas as consultas poderão ser executadas mais rapidamente, dependendo da construção do padrão e do comprimento das cadeias de caracteres que estão sendo indexadas.The index will be larger, but queries might execute faster, depending on the pattern construction and the length of strings you are indexing.

Impacto de um analisador em consultas curingaImpact of an analyzer on wildcard queries

Durante a análise de consulta, as consultas que são formuladas como prefixo, sufixo, curinga ou expressões regulares são passadas como estão para a árvore de consulta, ignorando a análise léxica.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. As correspondências só serão encontradas se o índice contiver as cadeias de caracteres no formato especificado pela sua consulta.Matches will only be found if the index contains the strings in the format your query specifies. Na maioria dos casos, você precisará de um analisador durante a indexação que preserva a integridade da cadeia de caracteres para que a correspondência de termos e padrões parciais seja realizada com sucesso.In most cases, you will need an analyzer during indexing that preserves string integrity so that partial term and pattern matching succeeds. Para obter mais informações, consulte pesquisa de termo parcial nas consultas de pesquisa cognitiva do Azure.For more information, see Partial term search in Azure Cognitive Search queries.

Considere uma situação em que você pode querer que a consulta de pesquisa ' terminat * ' retorne resultados que contenham termos como ' Terminate ', ' terminação ' e ' encerrações '.Consider a situation where you may want the search query 'terminat*' to return results that contain terms such as 'terminate', 'termination' and 'terminates'.

Se você fosse usar o analisador en. Lucene (Inglês Lucene), ele aplicaria uma lematização agressiva de cada termo.If you were to use the en.lucene (English Lucene) analyzer, it would apply aggressive stemming of each term. Por exemplo, ' Terminate ', ' terminação ', ' finalizações ' serão indexados para baixo até o token ' Termi ' no índice.For example, 'terminate', 'termination', 'terminates' will all be tokenized down to the token 'termi' in your index. Por outro lado, os termos em consultas que usam Curingas ou pesquisa difusa não são analisados. portanto, não haveria nenhum resultado que corresponda à consulta ' terminat * '.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.

Por outro lado, os analisadores da Microsoft (neste caso, o en. Microsoft Analyzer) são um pouco mais avançados e usam lematização em vez de derivar.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. Isso significa que todos os tokens gerados devem ser palavras válidas em inglês.This means that all generated tokens should be valid English words. Por exemplo, ' Terminate ', ' Finalize ' e ' rescisão ' permanecerão em todo o índice e seria uma opção preferida para cenários que dependem muito de curingas e pesquisa difusa.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.

Classificar consultas de caractere curinga e regexScoring wildcard and regex queries

O Azure Pesquisa Cognitiva usa a pontuação baseada em frequência (TF-IDF) para consultas de texto.Azure Cognitive Search uses frequency-based scoring (TF-IDF) for text queries. No entanto, para consultas curinga e regex em que o escopo de termos pode ser potencialmente amplo, o fator de frequência é ignorado para impedir que a classificação seja direcionada para correspondências de termos mais raros.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. Todas as correspondências são tratadas da mesma maneira para as pesquisas de caractere curinga e regex.All matches are treated equally for wildcard and regex searches.

Caracteres especiaisSpecial characters

Em algumas circunstâncias, talvez você queira procurar um caractere especial, como um Emoji ' ❤ ' ou o sinal ' € '.In some circumstances, you may want to search for a special character, like an '❤' emoji or the '€' sign. Nesses casos, certifique-se de que o analisador usado não filtre esses caracteres. O analisador padrão ignora muitos caracteres especiais, excluindo-os do índice.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.

Os analisadores que exportam caracteres especiais incluem o analisador "Whitespace", que leva em consideração quaisquer sequências de caracteres separadas por espaços em branco como tokens (portanto, a cadeia de caracteres "❤" seria considerada um 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). Além disso, um analisador de linguagem como o Microsoft English Analyzer ("en. Microsoft"), levaria a cadeia de caracteres "€" como um token.Also, a language analyzer like the Microsoft English analyzer ("en.microsoft"), would take the "€" string as a token. Você pode testar um analisador para ver quais tokens ele gera para uma determinada consulta.You can test an analyzer to see what tokens it generates for a given query.

Ao usar caracteres Unicode, certifique-se de que os símbolos tenham um escape correto na URL de consulta (por exemplo, para "❤" usaria a sequência de 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+). O postmaster faz essa tradução automaticamente.Postman does this translation automatically.

Precedência (agrupamento)Precedence (grouping)

Você pode usar parênteses para criar subconsultas, incluindo operadores dentro da instrução entre parênteses.You can use parentheses to create subqueries, including operators within the parenthetical statement. Por exemplo, motel+(wifi|luxury) irá procurar documentos que contenham o termo "motel" e "wifi" ou "luxo" (ou ambos).For example, motel+(wifi|luxury) will search for documents containing the "motel" term and either "wifi" or "luxury" (or both).

O agrupamento de campo é semelhante, mas tem como escopo o agrupamento para um único campo.Field grouping is similar but scopes the grouping to a single field. Por exemplo, hotelAmenities:(gym+(wifi|pool)) pesquisa o campo "comodidadesDoHotel" para "academia" e "wifi" ou "academia" e "piscina".For example, hotelAmenities:(gym+(wifi|pool)) searches the field "hotelAmenities" for "gym" and "wifi", or "gym" and "pool".

Limites de tamanho de consultaQuery size limits

Há um limite para o tamanho das consultas que você pode enviar para o Azure Pesquisa Cognitiva.There is a limit to the size of queries that you can send to Azure Cognitive Search. Especificamente, você pode ter, no máximo, 1024 cláusulas (expressões separadas por AND, OR e assim por diante).Specifically, you can have at most 1024 clauses (expressions separated by AND, OR, and so on). Há também um limite de aproximadamente 32 KB em relação ao tamanho de qualquer termo individual em uma consulta.There is also a limit of approximately 32 KB on the size of any individual term in a query. Se seu aplicativo gerar consultas de pesquisa por meio de programação, é recomendável criá-lo de forma que ele não gere consultas de tamanho ilimitado.If your application generates search queries programmatically, we recommend designing it in such a way that it does not generate queries of unbounded size.

Veja tambémSee also