困扰了2天的问题, 莫名其妙设置了一个叫做 default的 type,结果后面一直报这个错,建索引会报,设置mapping会报,使用logstash导入数据会爆 ,删除type再设置还会报;
我的场景是这样子的,新安的服务6.6,没有任何索引,安装了logstash,然后利用它将数据从mysql导入到es中,
logstash的conf如下:
logstash启动的时候会看到它使用的template是默认的,然后这样导入的数据后,自动创建了索引 index005 默认的_type 是doc,即:logstash在同步的时候会自动创建一个doc类型的index !!! 原因在此。
默认的mapping 是这样的
type为keyword的不会分词。
如果你的情况跟我的一样,那么下面是我的解决方法:
首先 删除之前的旧索引;
从新建立一个索引,并直接设置它的mapping(一个动作):
其实默认mapping里面的type 是 doc, 上面操作的含义可以理解为把所有的类型都映射为string,里面type为text 分词为ik
然后再使用logstash导入数据后,发现mapping变成了这样,
便可以分词搜索了;
搞的我头都大了,删除了索引 那个mapping还在,网上也找到了很多,都说什么6版本不支持多type呀,大家都知道了 还有啥可说的,解决办法倒没人讲出来了。。。另外 对于type概念相当于 mysql的 table概念,是个错误的说法,官方给出说明,不要记错了。
删除type的方法:
POST /tableindex/default/_delete_by_query?conflicts=proceed
{
"query": {
"match_all": {}
}
}
确实可以删除type,但是mapping还是去不掉;
此方法参考的是官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/6.0/dynamic-templates.html
有什么问题可以在下方评论,转载请注明出处,多谢!