Utilice Tablestore SDK for Python para obtener fragmentos de campos Text que contengan tokens coincidentes y marcar dichos tokens.
Requisitos previos
Instale Tablestore SDK for Python e inicialice un cliente.
La función de resumen y resaltado requiere la versión 6.0.0 del SDK o posterior. Se recomienda utilizar la versión más reciente del SDK.
Al crear search index, establezca enable_highlighting en True para el campo Text de destino.
Descripción
El resumen y resaltado extrae fragmentos de texto alrededor de los tokens coincidentes y marca estos tokens con etiquetas de apertura y cierre. Esta función solo es compatible con campos Text. En una consulta, utilice SearchQuery.highlight para especificar los campos y las configuraciones de fragmentos.
Tablestore SDK for Python 6.4.6 admite el resumen y resaltado para TermQuery, TermsQuery, PrefixQuery, WildcardQuery, RangeQuery, BoolQuery, MatchQuery y MatchPhraseQuery. Para BoolQuery, puede resaltar los campos utilizados por los tipos de consultas secundarias compatibles. Para NestedQuery, configure el resaltado de filas secundarias coincidentes en InnerHits.highlight. Para obtener más información, consulte Nested query.
Con MatchQuery o MatchPhraseQuery, un token coincidente podría marcarse con varios pares de etiquetas de apertura y cierre. MatchPhraseQuery no admite el resaltado en un campo Text que utiliza el analizador semántico máximo. Un límite de fragmento podría dividir un token coincidente e impedir que se resalte.
En el siguiente ejemplo se busca el token tablestore en el campo description y se marcan los tokens coincidentes en los fragmentos con <b> y </b>.
query = MatchQuery("description", "tablestore")
highlight = Highlight(
[
HighlightParameter(
"description",
number_of_fragments=1,
fragment_size=100,
pre_tag="<b>",
post_tag="</b>",
)
],
HighlightEncoder.PLAIN_MODE,
)
response = client.search(
"example_table",
"example_index",
SearchQuery(query, limit=10, highlight=highlight),
)
for hit in response.search_hits:
for field in hit.highlight_result.highlight_fields:
print(field.field_name, field.field_fragments)
Parámetros
search_query.highlight es de tipo Highlight. La siguiente tabla utiliza rutas completas para describir los dos niveles de configuración de Highlight y HighlightParameter.
|
Nombre |
Tipo |
Descripción |
|
highlight_parameters (obligatorio) |
|
Configuraciones de fragmentos resaltados para los campos. Cada campo debe tener el resaltado habilitado y participar en un tipo de consulta que admita esta función. |
|
highlight_encoder (opcional) |
|
Modo de codificación del texto de los fragmentos. |
|
highlight_parameters[].field_name (obligatorio) |
|
Nombre del campo |
|
highlight_parameters[].number_of_fragments (opcional) |
|
Número máximo de fragmentos que se devolverán para un campo. Se recomienda |
|
highlight_parameters[].fragment_size (opcional) |
|
Longitud objetivo del fragmento. Valor predeterminado: |
|
highlight_parameters[].pre_tag (opcional) |
|
Etiqueta de apertura para los tokens coincidentes. Valor predeterminado: |
|
highlight_parameters[].post_tag (opcional) |
|
Etiqueta de cierre para los tokens coincidentes. Valor predeterminado: |
|
highlight_parameters[].fragments_order (opcional) |
|
Orden de clasificación de los fragmentos. |
Respuesta
Los resultados de resaltado están disponibles en SearchResponse.search_hits[].highlight_result y tienen la siguiente estructura.
|
Campo |
Tipo |
Descripción |
|
search_hits |
|
Resultados de la búsqueda. |
|
search_hits[].row |
|
Fila coincidente. |
|
search_hits[].highlight_result |
|
Resultado de resumen y resaltado para la fila. El valor está vacío si no se devuelve ningún resaltado. |
|
search_hits[].highlight_result.highlight_fields |
|
Resaltados correspondientes a los campos de la fila. |
|
highlight_fields[].field_name |
|
Nombre del campo resaltado. |
|
highlight_fields[].field_fragments |
|
Fragmentos resaltados. Los tokens coincidentes se marcan con las etiquetas configuradas. |
Respuesta compatible con tuplas
A partir de Tablestore SDK for Python 5.2.0, las API de búsqueda devuelven objetos de respuesta en lugar de tuplas. La versión 5.1.0 y anteriores devuelven tuplas directamente. En la versión 5.2.1 y posteriores, puede llamar a SearchResponse.v1_response() para obtener una tupla compatible con versiones anteriores. Para código nuevo, acceda directamente a los atributos de SearchResponse y evite errores de desempaquetado si se amplían los campos de respuesta.
(
rows,
next_token,
total_count,
is_all_succeed,
agg_results,
group_by_results,
search_hits,
) = response.v1_response()