Compartir a través de


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 un filtrado booleano estricto de maneras que no son posibles simplemente mediante el parámetro de nivel search 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. Los documentos coincidentes se devuelven en el conjunto de resultados. 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 por campos en el search parámetro , los especificadores de campo de la consulta 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 search parámetro , tienen 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 search.ismatch función devuelve un valor de tipo Edm.Boolean, que permite componerlo con otras subexpresiones de filtro mediante los operadores lógicos booleanos.

Nota:

Azure AI Search no admite el uso search.ismatch o search.ismatchscoring dentro de expresiones lambda. Esto significa que no es posible escribir filtros en colecciones de objetos que pueden correlacionar coincidencias de búsqueda de texto completo con coincidencias de filtro estrictas en el mismo objeto. Para más información sobre esta limitación, así como ejemplos, consulte Solución de problemas de filtros de recopilació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 ellos es que la puntuación de relevancia de los documentos que coinciden con la search.ismatchscoring consulta contribuye a la puntuación general del documento, mientras que para search.ismatch, la puntuación del documento no cambia. 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')

Esta es la sintaxis de consulta completa para esta solicitud, que puede ejecutar en el Explorador de búsqueda en Azure Portal. La salida consta de coincidencias en frente, agua y frente.

{
  "search": "*",
  "select": "HotelId, HotelName, Description",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatchscoring('waterfront')"
}

Buscar documentos con la palabra "pool" y clasificación mayor o igual a 4, o documentos con la palabra "motel" y igual a 3.2. Tenga en cuenta que esta solicitud no se pudo expresar sin la search.ismatchscoring función .

    search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2

Esta es la sintaxis de consulta completa para esta solicitud para el Explorador de búsqueda. La salida consta de coincidencias en hoteles con grupos con una clasificación superior a 4 , o moteles con una clasificación igual a 3.2.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatchscoring('pool') and Rating ge 4 or search.ismatchscoring('motel') and Rating eq 3.2"
}

Buscar documentos sin la palabra "luxury".

    not search.ismatch('luxury')

Esta es la sintaxis de consulta completa para esta solicitud. La salida consta de coincidencias en el término lujo.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "not search.ismatch('luxury')"
}

Busque documentos con la frase "ocean" o rating igual a 3.2. La search.ismatchscoring consulta solo se ejecuta en campos HotelName y Description.

Esta es la sintaxis de consulta completa para esta solicitud. También se devuelven documentos que coinciden con la segunda cláusula de la disjunción (en concreto, hoteles con Rating igual a 3.2). Para aclarar que esos documentos no coinciden con ninguna de las partes puntuadas de la expresión, se devuelven con puntuación igual a cero.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Rating",
  "searchMode": "all",
  "queryType": "full",
  "count": true,
  "filter": "search.ismatchscoring('ocean', 'Description,HotelName') or Rating eq 3.2"
}

La salida consta de 4 coincidencias: hoteles que mencionan "océano" en descripción o nombre del hotel, o hoteles con una calificación de 3.2. Observe la puntuación de búsqueda de cero para las coincidencias en la segunda cláusula.

{
  "@odata.count": 4,
  "value": [
    {
      "@search.score": 1.6076145,
      "HotelId": "18",
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Rating": 4.2
    },
    {
      "@search.score": 1.0594962,
      "HotelId": "41",
      "HotelName": "Windy Ocean Motel",
      "Description": "Oceanfront hotel overlooking the beach features rooms with a private balcony and 2 indoor and outdoor pools. Inspired by the natural beauty of the island, each room includes an original painting of local scenes by the owner. Rooms include a mini fridge, Keurig coffee maker, and flatscreen TV. Various shops and art entertainment are on the boardwalk, just steps away.",
      "Rating": 3.5
    },
    {
      "@search.score": 0,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Rating": 3.2
    },
    {
      "@search.score": 0,
      "HotelId": "26",
      "HotelName": "Planetary Plaza & Suites",
      "Description": "Extend Your Stay. Affordable home away from home, with amenities like free Wi-Fi, full kitchen, and convenient laundry service.",
      "Rating": 3.2
    }
  ]
}

Busque documentos en los que los términos "hotel" y "airport" están dentro de 5 palabras entre sí en la descripción del hotel, y donde no se permite fumar en al menos algunas de las habitaciones.

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

Esta es la sintaxis de consulta completa. Para ejecutarse en el Explorador de búsqueda, escape las comillas interiores con un carácter de barra diagonal inversa.

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatch('\"hotel airport\"~5', 'Description', 'full', 'any') and Rooms/any(room: not room/SmokingAllowed)"
}

La salida consta de un único documento donde los términos "hotel" y "airport" están a una distancia de 5 palabras. Se permite fumar en varias habitaciones de la mayoría de los hoteles, incluido el de este resultado de búsqueda.

{
  "@odata.count": 1,
  "value": [
    {
      "@search.score": 1,
      "HotelId": "40",
      "HotelName": "Trails End Motel",
      "Description": "Only 8 miles from Downtown. On-site bar/restaurant, Free hot breakfast buffet, Free wireless internet, All non-smoking hotel. Only 15 miles from airport.",
      "Tags": [
        "bar",
        "free wifi",
        "restaurant"
      ],
      "Rating": 3.2
    }
  ]
}

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

Esta es una consulta completa:

{
  "search": "*",
  "select": "HotelId, HotelName, Description, Tags, Rating",
  "searchMode": "all",
  "queryType": "simple",
  "count": true,
  "filter": "search.ismatch('lux*', 'Description')"
}

La salida consta de las siguientes coincidencias.

{
  "@odata.count": 4,
  "value": [
    {
      "@search.score": 1,
      "HotelId": "18",
      "HotelName": "Ocean Water Resort & Spa",
      "Description": "New Luxury Hotel for the vacation of a lifetime. Bay views from every room, location near the pier, rooftop pool, waterfront dining & more.",
      "Tags": [
        "view",
        "pool",
        "restaurant"
      ],
      "Rating": 4.2
    },
    {
      "@search.score": 1,
      "HotelId": "13",
      "HotelName": "Luxury Lion Resort",
      "Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium and transportation hubs, we feature the best in convenience and comfort.",
      "Tags": [
        "bar",
        "concierge",
        "restaurant"
      ],
      "Rating": 4.1
    },
    {
      "@search.score": 1,
      "HotelId": "16",
      "HotelName": "Double Sanctuary Resort",
      "Description": "5 star Luxury Hotel - Biggest Rooms in the city. #1 Hotel in the area listed by Traveler magazine. Free WiFi, Flexible check in/out, Fitness Center & espresso in room.",
      "Tags": [
        "view",
        "pool",
        "restaurant",
        "bar",
        "continental breakfast"
      ],
      "Rating": 4.2
    },
    {
      "@search.score": 1,
      "HotelId": "14",
      "HotelName": "Twin Vortex Hotel",
      "Description": "New experience in the making. Be the first to experience the luxury of the Twin Vortex. Reserve one of our newly-renovated guest rooms today.",
      "Tags": [
        "bar",
        "restaurant",
        "concierge"
      ],
      "Rating": 4.4
    }
  ]
}

Pasos siguientes