Partilhar via


Funções de pesquisa de texto completo OData no Azure AI Search - search.ismatch e search.ismatchscoring

O Azure AI Search dá suporte à pesquisa de texto completo no contexto de expressões de filtro OData por meio das search.ismatch funções e search.ismatchscoring . Essas funções permitem que você combine a pesquisa de texto completo com filtragem booleana estrita de maneiras que não são possíveis apenas usando o parâmetro de nível search superior da API de pesquisa.

Nota

As search.ismatch funções e search.ismatchscoring só são suportadas em filtros na API de pesquisa. Eles não são suportados nas APIs Sugerir ou Preenchimento Automático.

Sintaxe

O seguinte EBNF (Extended Backus-Naur Form) define a gramática das search.ismatch funções 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 interativo também está disponível:

Nota

Consulte Referência de sintaxe de expressão OData para Azure AI Search para obter o EBNF completo.

search.ismatch

A search.ismatch função avalia uma consulta de pesquisa de texto completo como parte de uma expressão de filtro. Os documentos que correspondem à consulta de 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)

Os parâmetros são definidos na tabela a seguir:

Nome do parâmetro Tipo Description
search Edm.String A consulta de pesquisa (na sintaxe de consulta Lucene simples ou completa ).
searchFields Edm.String Lista separada por vírgulas de campos pesquisáveis para pesquisar; O padrão é todos os campos pesquisáveis no índice. Ao usar a search pesquisa em campo no parâmetro, os especificadores de campo na consulta Lucene substituem todos os campos especificados nesse parâmetro.
queryType Edm.String 'simple' ou 'full'; inadimplência para 'simple'. Especifica qual linguagem de consulta foi usada no search parâmetro.
searchMode Edm.String 'any'ou 'all', o padrão é .'any' Indica se algum ou todos os termos de pesquisa no search parâmetro devem ser correspondidos para contar o documento como uma correspondência. Ao usar os operadores Lucene Boolean no search parâmetro, eles terão precedência sobre este parâmetro.

Todos os parâmetros acima são equivalentes aos parâmetros de solicitação de pesquisa correspondentes na API de pesquisa.

A search.ismatch função retorna um valor do tipo Edm.Boolean, que permite compô-la com outras subexpressões de filtro usando os operadores lógicos booleanos.

Nota

O Azure AI Search não suporta o uso search.ismatch ou search.ismatchscoring dentro de expressões lambda. Isso significa que não é possível escrever filtros sobre coleções de objetos que possam correlacionar correspondências de pesquisa de texto completo com correspondências de filtro estritas no mesmo objeto. Para obter mais detalhes sobre essa limitação, bem como exemplos, consulte Solução de problemas de filtros de coleção no Azure AI Search. Para obter informações mais detalhadas sobre por que essa limitação existe, consulte Noções básicas sobre filtros de coleção no Azure AI Search.

search.ismatchscoring

A search.ismatchscoring função, como a search.ismatch função, 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 correspondentes à search.ismatchscoring consulta contribuirá para a pontuação geral do documento, enquanto no caso do search.ismatch, a pontuação do documento não será alterada. As seguintes sobrecargas desta 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)

search.ismatch As funções e search.ismatchscoring podem ser usadas na mesma expressão de filtro.

Exemplos

Encontre documentos com a palavra "beira-mar". Esta consulta de filtro é idêntica a uma solicitação de pesquisa com search=waterfront.

    search.ismatchscoring('waterfront')

Encontre 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. Note, este pedido não poderia ser expresso sem a search.ismatchscoring função.

    search.ismatchscoring('hostel') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 5

Encontre documentos sem a palavra "luxo".

    not search.ismatch('luxury')

Encontre documentos com a frase "vista para o mar" ou classificação igual a 5. A search.ismatchscoring consulta será executada apenas em campos HotelName e Rooms/Description.

Documentos que correspondam apenas à segunda cláusula da disjunção também serão devolvidos - hotéis com Rating igual a 5. Para deixar claro que esses documentos não corresponderam a nenhuma das partes pontuadas da expressão, eles serão devolvidos com pontuação igual a zero.

    search.ismatchscoring('"ocean view"', 'Rooms/Description,HotelName') or Rating eq 5

Encontre documentos onde os termos "hotel" e "aeroporto" estão a menos de 5 palavras um do outro na descrição do hotel, e onde não é permitido fumar em pelo menos alguns dos quartos. Esta 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. Esta consulta usa a pesquisa de prefixo em combinação com search.ismatcho .

    search.ismatch('lux*', 'Description')

Próximos passos