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')

Próximas etapas