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