Compartir por


Funciones de búsqueda de texto completo de OData en Azure AI Search: search.ismatch y search.ismatchscoring

Azure AI Search admite la búsqueda de texto completo en el contexto de las expresiones de filtro de OData a través de las funciones search.ismatch y search.ismatchscoring. Estas funciones permiten combinar la búsqueda de texto completo con filtros booleanos estrictos de formas que no son posibles con el parámetro search de nivel superior de Search API.

Nota:

Las funciones search.ismatch y search.ismatchscoring solo se admiten en los filtros de Search API. No se admiten en las API Suggest o Autocomplete.

Sintaxis

La siguiente EBNF (notación de Backus-Naur extendida) define la gramática de las funciones search.ismatch y 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'"

También está disponible un diagrama de sintaxis interactivo:

Nota:

Consulta Referencia de sintaxis de expresiones OData para Azure AI Search para obtener la EBNF completa.

search.ismatch

La función search.ismatch evalúa la consulta de búsqueda de texto completo como parte de una expresión de filtro. En el conjunto de resultados, se devolverán los documentos donde se encontraran coincidencias con la consulta de búsqueda. Están disponibles las siguientes sobrecargas de esta función:

  • search.ismatch(search)
  • search.ismatch(search, searchFields)
  • search.ismatch(search, searchFields, queryType, searchMode)

Los parámetros se definen en la tabla siguiente:

Nombre de parámetro Type Descripción
search Edm.String La consulta de búsqueda (en la sintaxis de consulta Lucene simple o completa).
searchFields Edm.String Lista separada por comas de los campos de búsqueda en los que se va buscar; el valor predeterminado son todos los campos de búsqueda del índice. Cuando se usa la búsqueda clasificada por campos en el parámetro search, los especificadores de campo de la consulta de Lucene invalidan los campos especificados en este parámetro.
queryType Edm.String 'simple' o 'full'; el valor predeterminado es 'simple'. Especifica qué lenguaje de consulta se usó en el parámetro search.
searchMode Edm.String 'any' o 'all'; el valor predeterminado es 'any'. Indica si alguno o todos los términos de búsqueda del parámetro search deben coincidir para que el documento cuente como una coincidencia. Cuando se usan los operadores booleanos de Lucene en el parámetro search, tendrán prioridad sobre este parámetro.

Todos los parámetros anteriores son equivalentes a los parámetros de solicitud de búsqueda de Search API correspondientes.

La función search.ismatch devuelve un valor de tipo Edm.Boolean, que permite redactarlo con otras subexpresiones de filtro mediante los operadores lógicos booleanos.

Nota:

Azure AI Search no admite el uso de search.ismatch o search.ismatchscoring dentro de las expresiones lambda. Esto significa que no se pueden escribir filtros sobre colecciones de objetos que pueden poner en correlación las coincidencias de búsqueda de texto completo con coincidencias de filtro estrictas en el mismo objeto. Para obtener más detalles sobre esta limitación, así como ejemplos, consulta Solución de problemas de los filtros de colección en Azure AI Search. Para obtener información más detallada sobre por qué existe esta limitación, consulta Describir los filtros de colección en Azure AI Search.

search.ismatchscoring

La función search.ismatchscoring, así como la función search.ismatch, devuelve true para los documentos que coinciden con la consulta de búsqueda de texto completo que se ha pasado como parámetro. La diferencia entre ellas es que la puntuación de relevancia de los documentos en los que se encontraron coincidencias con la consulta search.ismatchscoring contribuirá a la puntuación total de los documentos, mientras que en el caso de search.ismatch, la puntuación de los documentos no cambiará. Las siguientes sobrecargas de esta función están disponibles con parámetros idénticos a los de search.ismatch:

  • search.ismatchscoring(search)
  • search.ismatchscoring(search, searchFields)
  • search.ismatchscoring(search, searchFields, queryType, searchMode)

Esto significa que las funciones search.ismatch y search.ismatchscoring se pueden usar en la misma expresión de filtro.

Ejemplos

Buscar documentos con la palabra "waterfront". Esta consulta de filtro es idéntica a una solicitud de búsqueda con search=waterfront.

    search.ismatchscoring('waterfront')

Buscar documentos con la palabra "hostel" y una valoración superior o igual a cuatro, o documentos con la palabra "motel" y una valoración igual a cinco. Tenga en cuenta que esta solicitud no se puede expresar sin la función search.ismatchscoring.

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

Buscar documentos sin la palabra "luxury".

    not search.ismatch('luxury')

Buscar documentos con la frase "ocean view" o con una valoración igual a cinco. La consulta search.ismatchscoring se ejecutará solo en los campos HotelName y Rooms/Description.

También se devolverán los documentos que cumplan la segunda cláusula de la disyunción (hoteles con Rating igual a 5). Para dejar claro que esos documentos no han coincidido con ninguno de los elementos puntuados de la expresión, se devolverán con una puntuación igual a cero.

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

Busque documentos donde los términos "hotel" y "airport" no estén separados por más de cinco palabras entre sí en la descripción del hotel y donde no se permita fumar en al menos algunas de las habitaciones. Esta consulta utiliza el lenguaje de consulta completo de Lucene.

    search.ismatch('"hotel airport"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)

Busque documentos que tengan una palabra que comience por las letras "lux" en el campo Descripción. En esta consulta se usa la búsqueda de prefijo en combinación con search.ismatch.

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

Pasos siguientes