Funções de pesquisa de texto completo do OData no Azure AI Search – search.ismatch
e search.ismatchscoring
O Azure AI Search dá suporte para pesquisa de texto completo no contexto de expressões de filtro do OData por meio das funções search.ismatch
e search.ismatchscoring
. Essas funções permitem combinar a pesquisa de texto completo com filtragem booliana estrita de maneiras que não são possíveis apenas usando o parâmetro de nível superior search
da API de Pesquisa.
Observação
As funções search.ismatch
e search.ismatchscoring
têm suporte apenas em filtros na API de Pesquisa. Elas não têm suporte nas APIs Sugerir e Preenchimento Automático.
Sintaxe
O seguinte EBNF (Formulário Estendido Backus-Naur) define a gramática das funções search.ismatch
e search.ismatchscoring
:
search_is_match_call ::=
'search.ismatch'('scoring')?'(' search_is_match_parameters ')'
search_is_match_parameters ::=
string_literal(',' string_literal(',' query_type ',' search_mode)?)?
query_type ::= "'full'" | "'simple'"
search_mode ::= "'any'" | "'all'"
Um diagrama de sintaxe interativa também está disponível:
Observação
Confira Referência de sintaxe de expressão OData para Azure AI Search para ver a EBNF completa.
search.ismatch
A função search.ismatch
avalia a consulta de pesquisa de texto completo como parte de uma expressão de filtro. Os documentos que correspondem à consulta da pesquisa serão retornados no conjunto de resultados. As seguintes sobrecargas desta função estão disponíveis:
search.ismatch(search)
search.ismatch(search, searchFields)
search.ismatch(search, searchFields, queryType, searchMode)
A tabela abaixo contém os parâmetros:
Nome do parâmetro | Tipo | Descrição |
---|---|---|
search |
Edm.String |
A consulta de pesquisa (em sintaxe de consulta Lucerne simples ou completa). |
searchFields |
Edm.String |
Lista separada por vírgulas de campos pesquisáveis, assume como padrão todos os campos pesquisáveis no índice. Ao usar a pesquisa de campo no parâmetro search , os especificadores de campo na consulta Lucene substituem todos os campos especificados nesse parâmetro. |
queryType |
Edm.String |
'simple' ou 'full' ; padrão é 'simple' . Especifica qual idioma de consulta foi usado no parâmetro search . |
searchMode |
Edm.String |
'any' ou 'all' , padrão é 'any' . Indica se deve haver uma correspondência com alguns ou todos os termos de pesquisa no parâmetro search para contar o documento como uma correspondência. Quando você usa os operadores boolianos do Lucene no parâmetro search , eles têm precedência sobre esse parâmetro. |
Todos os parâmetros acima são equivalentes aos respectivos parâmetros de solicitação de pesquisa na API de Pesquisa.
A função search.ismatch
retorna um valor do tipo Edm.Boolean
, que permite que você a escreva com outras subexpressãos de filtro usando os operadores lógicos boolianos.
Observação
O Azure AI Search não dá suporte para o uso de search.ismatch
ou search.ismatchscoring
em expressões lambda. Isso significa que não é possível gravar filtros em coleções de objetos que podem correlacionar correspondências de pesquisa de texto completo com correspondências de filtro estritas no mesmo objeto. Veja mais detalhes sobre essa limitação e exemplos em Solução de problemas de filtros de coleta no Azure AI Search. Veja informações mais detalhadas sobre o motivo dessa limitação em Noções básicas sobre filtros de coleta no Azure AI Search.
search.ismatchscoring
A função search.ismatchscoring
, como a função search.ismatch
, retorna true
para documentos que correspondem à consulta de pesquisa de texto completo passada como um parâmetro. A diferença entre eles é que a pontuação de relevância dos documentos que correspondem à consulta search.ismatchscoring
também contribui para a pontuação geral do documento, enquanto que no caso de search.ismatch
, a pontuação de documento não se altera. As seguintes sobrecargas dessa função estão disponíveis com parâmetros idênticos aos de search.ismatch
:
search.ismatchscoring(search)
search.ismatchscoring(search, searchFields)
search.ismatchscoring(search, searchFields, queryType, searchMode)
As funções search.ismatch
e search.ismatchscoring
podem ser usadas na mesma expressão de filtro.
Exemplos
Localizar documentos com as palavras "orla marítima". Essa consulta de filtro é idêntica a uma solicitação de pesquisa com search=waterfront
.
search.ismatchscoring('waterfront')
Localizar documentos com a palavra "hostel" e classificação maior ou igual a 4, ou documentos com a palavra "motel" e classificação igual a 5. Observe que essa solicitação não pode ser expressa sem a função search.ismatchscoring
.
search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5
Localizar documentos sem a palavra "luxo".
not search.ismatch('luxury')
Localizar documentos com a frase "vista para o mar" ou classificação igual a 5. A consulta search.ismatchscoring
será executada apenas em relação aos campos HotelName
e Rooms/Description
.
Os documentos que corresponderam apenas à segunda cláusula da disjunção também serão retornados: hotéis com Rating
igual a 5. Para deixar claro, esses documentos não corresponderam a nenhuma parte classificada da expressão e serão retornados com pontuação igual a zero.
search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5
Localizar documentos em que os termos "hotel" e "aeroporto" estão a cinco palavras de distância um do outro na descrição do hotel e em que fumar não é permitido em ao menos alguns quartos. Essa consulta usa a linguagem de consulta Lucene completa.
search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)
Encontre documentos que tenham uma palavra que comece com as letras "lux" no campo Descrição. Essa consulta usa a pesquisa de prefixo em combinação com search.ismatch
.
search.ismatch('lux*', 'Description')