Artículos de referencia:
https://blog.csdn.net/sfh2018/article/details/118083634
https://blog.csdn.net/w1014074794/article/details/119643883
Introducción a los tipos de texto y palabras clave.
- ES5.0 y versiones posteriores cancelan
string
tipos y dividen losstring
tipos originales en dos tipos:text
y .keyword
La diferencia estext会对字段进行分词处理而keyword则不会进行分词
.
Es decir, si el campo es de tipo texto, primero se segmentarán los datos almacenados, y luego las frases segmentadas se almacenarán en el índice, mientras que las palabras clave no se segmentarán y se almacenarán directamente.text
Los tipos de datos se utilizan para indexar textos largos, como el cuerpo de un correo electrónico o la introducción de un producto. Estos textos se analizan y segmentan en frases mediante un segmentador de palabras antes de crear el documento de índice. Después del mecanismo de segmentación de palabras, es permite la recuperación de las palabras segmentadas en el texto但是text类型的数据不能用来过滤、排序和聚合等操作
.keyword
Este tipo de datos puede cumplir con los requisitos de datos como direcciones de correo electrónico, nombres de host, códigos de estado, códigos postales y etiquetas. No realiza segmentación de palabras y se usa a menudo para filtrar, ordenar y agregar.
¿Cómo hace coincidir elasticsearch con precisión los campos de texto?
Múltiples configuraciones de tipo para el mismo campo
Cree un índice y agregue el alias sin formato al campo de la ciudad a través de la palabra clave de campos en el mapeo. El tipo es palabra clave, que se utiliza para la coincidencia y clasificación exacta.
- Crear índice
PUT test_index03
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"city": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
}
}
}
}
}
}
- agregando datos
PUT /test_index03/_doc/1
{
"name" : "叶子在这儿",
"city" : "陕西省西安市长安区"
}
PUT /test_index03/_doc/2
{
"name":"北京的小家",
"city":"北京市昌平区回龙观街道"
}
- Consulta precisa (use alias para realizar consultas precisas)
GET /test_index03/_search
{
"query": {
"bool": {
"must": [
{
"term": {
"city.raw": {
"value": "陕西省西安市长安区"
}
}
}
]
}
},
"sort": {
"city.raw": "asc"
},
"aggs": {
"Cities": {
"terms": {
"field": "city.raw"
}
}
}
}
Configuración de múltiples reglas de segmentación de palabras para el mismo campo
Para el texto del campo, el separador de palabras del analizador estándar se usa de forma predeterminada;
cuando el alias inglés se declara a través de campos, se usa el separador de palabras en inglés.
PUT test_index04
{
"mappings": {
"properties": {
"city": {
"type": "text",
"fields": {
"english": {
"type": "text",
"analyzer": "english"
}
}
}
}
}
}
- agregando datos
PUT test_index03/_doc/1
{
"text": "quick brown fox" }
PUT test_index03/_doc/2
{
"text": "quick brown foxes" }
- Preguntar
Utilice la consulta de coincidencia de múltiples campos multi_match para lograr la recuperación de múltiples reglas de segmentación de palabras en un campo.
GET /test_index03/_search
{
"query": {
"multi_match": {
"query": "quick brown foxes",
"fields": [
"text",
"text.english"
],
"type": "most_fields"
}
}
}