一、Kibana 上无法正常Discovery 日志的问题
问题描述:
客户同一个集群,同一个索引里的某些文档,用API能直接搜出来,但是在discovery上不能正常搜索,换另外一个id又能正常展示.
代码语言:javascript复制GET wemeet-client-event-2021.01.29/_search
{
"query": {
"match": {
"_id": "frmnTXcBk6fZ1AMtfKEH"
}
}
} //能正常返回
解决办法:
1,通过对比该索引里的不同文档具体属性可知,能在discovery界面正常返回的带时间戳字段,而不能返回的文档并不具备时间戳字段“@timestamp”,因此,不具备该字段的文档就无法正常在kibana返回,但是API确是可以正常搜索。
问题产生背景:
客户该索引的数据来自2部分,1个是filebeat产生的带时间戳的,一个是客户自己用代码自己手动写入的忘记带时间戳字段。
二、Reindex 复制索引数据报错导致复制失败
问题描述:
客户将存量索引通过reindex的方式拷贝到新生产的索引上,ES 集群版本为:6.4.3
代码语言:javascript复制POST _reindex
{
"source": {
"index": "db_article_om_202011"
},
"dest": {
"index": "db_contentgram_test"
}
}
报错信息如下:
代码语言:javascript复制failures": [
{
"index": "db_contentgram_test",
"type": "t_article_om",
"id": "10_20201110A0C9XJ_0",
"cause": {
"type": "mapper_parsing_exception",
"reason": "failed to parse",
"caused_by": {
"type": "illegal_state_exception",
"reason": "Mixing up field types: class org.elasticsearch.index.mapper.KeywordFieldMapper$KeywordFieldType != class org.elasticsearch.index.mapper.TextFieldMapper$TextFieldType on field title"
}
}
通过排查:
按照信息提示可知,初步判定是title字段类型不一致导致,于是我们检查目标索引的title字段,发现并没异常。因为修改字段类型,而后再reindex是比较常用的手段。
再排查,发现新旧两个索引的的type不一致。而6.4.3低版本是可以支持多type的。于是删掉新索引的type,重新reindex就没有报错了。
附上方法:
代码语言:javascript复制PUT /db_contentgram_test //创建索引
{
"settings": {
"analysis": {
"analyzer": {
"ngram_analyzer": {
"tokenizer": "ngram_tokenizer"
}
},
"tokenizer": {
"ngram_tokenizer": {
"type": "ngram",
"min_gram": 1,
"max_gram": 2,
"token_chars": [
"letter",
"digit"
]
}
}
}
}
代码语言:javascript复制PUT db_contentgram_test/_mapping/t_article_om //创建mapping
{
"_source": {
"enabled":true
},
"_all":{
"enabled":false
},
"properties": {
"abstract": {
"type": "text",
"analyzer": "ngram_analyzer"
},
"account": {
"type": "keyword"
},
"accountname": {
"type": "keyword"
},
"addtime": {
"type": "integer"
},
"articleid": {
"type": "keyword"
},
"businessid": {
"type": "integer"
}
.........
然后再执行reindex就不报错了。
当然,上面的问题,我们可以指定源索引的特定type进行复制迁移,这样就不必要求2个索引type一致了。参数如下:
代码语言:javascript复制POST _reindex?wait_for_completion=false
{
"source": {
"index": ["db_content_test"],
"type": ["t_article"] //指定type
},
"dest": {
"index": "db_contentgram_test1",
"type":"t_article_om_server" //新索引type
}
以上,也能解决reindex报错的问题。
Reindex指定链接迁移 参考链接 :https://www.elastic.co/guide/en/elasticsearch/reference/6.4/docs-reindex.html