Mejore de la clasificación de un documento con la priorización de términos
La búsqueda funciona mejor cuando se muestran primero los resultados más relevantes. Todos los motores de búsqueda intentan arrojar los resultados más relevantes para las consultas de búsqueda. Búsqueda de Azure AI implementa una versión mejorada de Apache Lucene para la búsqueda de texto completo.
Aquí, explorará cómo escribir consultas de Lucene más complejas. A continuación, mejorará la relevancia de los resultados priorizando términos específicos en la consulta de búsqueda.
Búsqueda de un índice
Búsqueda de Azure AI permite consultar un índice mediante un punto de conexión REST o desde Azure Portal con la herramienta de explorador de búsqueda. Si desea un resumen rápido de las fases del procesamiento de consultas, consulte la unidad de búsqueda de índice en Creación de una solución de Búsqueda de Azure AI.
En esta unidad, nos centraremos en el análisis de consultas.
Usará el explorador de búsqueda para ver la diferencia entre usar el tipo de consulta simple y completo y el efecto que tiene los resultados de la búsqueda.
Nota:
Si desea ejecutar las consultas usted mismo, necesitará una suscripción de Azure. Cree un servicio Búsqueda de Azure AI e importe los datos de ejemplo de los hoteles en un índice.
Cree una consulta simple
Los datos de ejemplo de los hoteles contienen 50 hoteles con descripciones, detalles de las habitaciones y sus ubicaciones. Imagine que lleva un negocio de reservas de hoteles y tiene una aplicación con la que los usuarios pueden hacer reservas. Los usuarios pueden realizar una búsqueda y los hoteles más relevantes deben mostrarse primero.
Tiene un caso de uso en el que un cliente está intentando encontrar un hotel de lujo. Para empezar, examine los resultados de búsqueda de esta consulta simple:
search=luxury&$select=HotelId, HotelName, Category, Tags, Description&$count=true
El analizador de consultas buscará el término luxury
en todos los campos de un documento del índice.
La cadena de consulta también limita los campos devueltos de los documentos agregando la select
opción.
&$select=HotelId, HotelName, Category, Tags, Description
El último parámetro de la consulta pide al índice que cuente los resultados totales.
$count=true
No se necesita ningún análisis léxico, por lo que la recuperación de documentos devuelve 14 documentos. Los tres primeros son:
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 14,
"value": [
{
"@search.score": 2.633778,
"HotelId": "13",
"HotelName": "Historic Lion Resort",
"Description": "Unmatched Luxury. Visit our downtown hotel to indulge in luxury accommodations. Moments from the stadium, we feature the best in comfort",
"Category": "Budget",
"Tags": [
"view",
"free wifi",
"free wifi"
]
},
{
"@search.score": 2.1104424,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
{
"@search.score": 1.966516,
"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.",
"Category": "Luxury",
"Tags": [
"continental breakfast",
"view",
"view"
]
},
...
]
}
Es posible que al cliente le sorprenda que el primer hotel, que tendría que ser de lujo, está en la categoría Presupuesto y no tiene aire acondicionado. Si el cliente escribe varias palabras en su búsqueda, la aplicación asume que todos los términos deben estar en los resultados, por lo que agrega a la consulta + entre los términos. La consulta que envía a la API es:
search=luxury + air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true
El servicio de búsqueda ahora devuelve cinco documentos, pero los resultados principales siguen estando en la categoría de presupuesto.
Habilite del analizador de consultas de Lucene
Puede indicar al explorador de búsqueda que use el analizador de consultas de Lucene agregando &queryType=full
a la cadena de consulta.
search=luxury AND air con&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Con la sintaxis de Lucene, puede escribir consultas más precisas. Este es un resumen de las características disponibles:
- Operadores booleanos:
AND
,OR
,NOT
por ejemploluxury AND 'air con'
. - Búsqueda por campos:
fieldName:search term
por ejemploDescription:luxury AND Tags:air con
. - Búsqueda aproximada:
~
por ejemploDescription:luxury~
devuelve resultados con versiones mal escritas de Lujo. - Búsqueda de proximidad de términos:
"term1 term2"~n
por ejemplo,"indoor swimming pool"~3
devuelve documentos con las palabras piscina cubierta dentro de tres palabras entre sí. - Búsqueda de expresiones regulares:
/regular expression/
usar una expresión regular entre/
por ejemplo/[mh]otel/
devolverá documentos con hotel y motel. - Búsqueda con caracteres comodín:
*
,?
donde*
coincidirá con varios caracteres y?
coincidirá con un solo carácter, por ejemplo,'air con'*
encontrará "aire con" y "aire acondicionado". - Agrupación de precedencia:
(term AND (term OR term))
por ejemplo(Description:luxury OR Category:luxury) AND Tags:air?con*
. - Priorización de términos:
^
por ejemploDescription:luxury OR Category:luxury^3
, daría a los hoteles con la categoría Lujo una puntuación más alta que la de la descripción.
Para obtener más información sobre estas características, consulte Sintaxis de consulta de Lucene en Búsqueda de Azure AI.
Aumentar los términos de búsqueda
Con lo anterior, puede mejorar los resultados. El analizador debe dar una prioridad más alta a los hoteles de la categoría Lujo. También puede ser más preciso y buscar "aire acondicionado" en el campo Etiquetas.
(Description:luxury OR Category:luxury^3) AND Tags:'air con'*
Al agregar los demás parámetros de cadena de consulta, obtendrá esta cadena de consulta:
search=(Description:luxury OR Category:luxury^3) AND Tags:'air con'*&$select=HotelId, HotelName, Category, Tags, Description&$count=true&queryType=full
Ahora, los tres hoteles principales:
{
"@odata.context": "https://advanced-cognitive-search.search.windows.net/indexes('hotels-sample-index')/$metadata#docs(*)",
"@odata.count": 5,
"value": [
{
"@search.score": 5.3537707,
"HotelId": "8",
"HotelName": "Sapphire Resort",
"Description": "Downtown, close to everything, steps to the park, shopping, and restaurants.",
"Category": "Luxury",
"Tags": [
"free wifi",
"continental breakfast",
"air conditioning"
]
},
{
"@search.score": 5.3522806,
"HotelId": "49",
"HotelName": "Old Carrabelle Hotel",
"Description": "Spacious rooms, glamorous suites and residences, rooftop pool, walking access to shopping, dining, entertainment and the city center.",
"Category": "Luxury",
"Tags": [
"air conditioning",
"laundry service",
"24-hour front desk service"
]
},
{
"@search.score": 4.1448884,
"HotelId": "18",
"HotelName": "Oceanside Resort",
"Description": "New Luxury Hotel. Be the first to stay. Bay views from every room, location near the piper, rooftop pool, waterfront dining & more.",
"Category": "Budget",
"Tags": [
"view",
"laundry service",
"air conditioning"
]
},
...
]
}
La puntuación de búsqueda de Sapphire Resorts ha aumentado de 2.3321536 a 5.3537707 y ahora es el primer hotel que verá el cliente. El Oceanside Resort ahora está en tercer lugar.