elasticsearch - template - Inhabilitando el análisis de campo por defecto en búsqueda elástica
elasticsearch keyword (2)
¿Es posible habilitar la indexación selectiva de los campos de búsqueda elástica para un tipo?
A través de la configuración de asignación para un índice específico, uno puede establecer la propiedad
{"índice": "not_analyzed"}
Para un campo específico. Como mi documento tiene demasiados campos y es probable que cambie la estructura en el futuro, necesitaría un mapeo donde los campos no se analicen por defecto a menos que se especifique de manera diferente.
es posible?
De elasticsearch 5.x el tipo de cadena está deshabilitado. En cambio, elasticsearch ha introducido dos tipos de texto y palabra clave . Lea este blog para conocer los motivos de la migración de datos https://www.elastic.co/blog/strings-are-dead-long-live-strings
Entonces, en lugar de agregar una plantilla para deshabilitar el analizador, simplemente puede usar field.keyword para buscar exactamente. por ejemplo, si el nombre del campo es fullName, y tiene entradas
- fullName: "John Doe"
- fullName: "John"
luego, fullName: "John" devolverá dos resultados, mientras que fullName.keyword: "John" devolverá un solo registro.
Por si acaso, aún desea deshabilitar el campo de texto, puede usar la siguiente plantilla dinámica,
PUT _template/disable_all_analyzer
{
"template": "*",
"mappings": {
"_default_": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "keyword"
}
}
}
]
}
}
}
¡¡¡Aclamaciones!!!
Sí, eche un vistazo a las plantillas dinámicas
Pruebe lo siguiente:
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic_templates": [
{ "notanalyzed": {
"match": "*",
"match_mapping_type": "string",
"mapping": {
"type": "string",
"index": "not_analyzed"
}
}
}
]
}
}
}
La plantilla dinámica es para nuevos campos que no están cubiertos por su asignación: de los documentos:
Con dynamic_templates, puede tomar el control completo de la asignación que se genera para los campos recientemente detectados.
También puede variar la asignación de acuerdo con el nombre del campo, por ejemplo, use "match": "*_data"
, para tener un conjunto diferente de asignaciones para los nombres de campo que terminan en "_data".