Destacado de búsqueda de combate de Elasticsearch
Directorio de artículos
1. Clip de resaltado personalizado
En la consulta básica anterior, simplemente usamos la función de resaltado para marcar las palabras clave de la consulta, y ES <em></em>
marcará las palabras clave con etiquetas por defecto . Si queremos usar un campo de etiqueta personalizado, debemos resaltarlo en las propiedades resaltadas más pre_tags
y post_tags
. Los ejemplos son los siguientes:
GET website/_search
{
"query":{
"match":{
"title":"自行车"
}
},
"highlight":{
"fields":{
"title":{
"pre_tags":["<strong>"],
"post_tags":["</strong>"]
}
}
}
}
2. Resaltado de múltiples campos
Al buscar resaltado, puede configurar varios campos para resaltar al mismo tiempo. Por ejemplo, al buscar un title
campo, queremos que address
las palabras clave del campo estén resaltadas. En este momento, debemos require_field_match
establecer el valor del atributo en false
. require_field_match
El valor predeterminado es true
que solo se resaltan los campos coincidentes. Los aspectos más destacados de varios campos son los siguientes:
GET website/_search
{
"query": {
"match_phrase": {
"title": "北京"
}
},
"highlight": {
"require_field_match": false,
"fields": {
"title": {
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
},
"address": {
"pre_tags": [
"<strong>"
],
"post_tags": [
"</strong>"
]
}
}
}
}
3. Destacar el análisis de rendimiento
ES proporciona tres tipos de marcadores, que son el valor predeterminado highlighter高亮器
, postings-highlighter高亮器
y fast-vector-highlighter高亮器
.
El highlighter
resaltador predeterminado es el más básico. highlighter
Para realizar la función de resaltado, el resaltador necesita realizar un análisis secundario_source
en el documento original guardado en el medio . Su velocidad es la más lenta entre los tres resaltadores. La ventaja es que no requiere espacio de almacenamiento adicional .
postings-highlighter
El resaltador no necesita un análisis secundario para lograr el resaltado , pero es necesario establecer el valor del parámetro index_options en el mapeo de campo en compensaciones y retener el desplazamiento de la palabra clave , que es más rápido que el resaltador. Como:
PUT website
{
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart",
"index_options":"offsets"
}
}
}
}
fast-vector-highlighter高亮器
Es el más rápido parawith_opsitions_offsets
lograr el resaltado, pero es necesario establecer el valor del parámetro term_vector en el mapeo de campo para guardar la ubicación y la información de compensación de la palabra clave, que ocupa el mayor espacio de almacenamiento, lo cual es una forma de intercambiar espacio por tiempo .
PUT website
{
"mappings":{
"properties":{
"title":{
"type":"text",
"analyzer":"ik_max_word",
"search_analyzer":"ik_smart",
"term_vector":"with_positions_offsets"
}
}
}
}
4. Sígueme
Buscar en la cuenta pública de WeChat: el camino hacia una arquitectura java sólida