上一篇es中涉及到了多字段的模糊匹配,但是效率很低,查询速度很慢。故使用es的copy_to。
需要修改索引mapping,而es官方说明不支持修改mapping。所以考虑新建索引,设置自定义mapping,再把数据转移到新的索引中。
我使用的是Elasticsearch-head进行操作。也可以使用kibana或其他。
查看当前索引的mapping,复制出来修改并添加copy_to到字段search
例如:
{
"mappings": {
"properties": {
"createTime": {
"type": "long"
},
"tittle": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"copy_to": "search"
},
"content": {
"type": "text",
"fields": {
"keyword": {
"ignore_above": 256,
"type": "keyword"
}
},
"copy_to": "search"
}
}
}
}
发送创建索引put请求:
PUT new_index
索引创建成功后将原索引数据拷贝到新索引中,发送post请求:
POST _reindex
{
"source": {"index": "old_index"},
"dest": {"index": "new_index"}
}
等待数据迁移完成就可以了
迁移完成后java中可以直接查询search就会匹配出结果。