如何解决Elasticsearch文档字段类型索引会自动更改
我正在一个包含django,elasticsearch和django-elasticsearch-dsl的项目。我正在收集大量数据,并通过django-elasticsearch-dsl将其保存到postgres并将其索引到elasticsearch。
我遇到了我不很了解的问题,也没有任何进一步的提示会发生什么事情:
Django的models.py文件的相关部分:
class LinkDenorm(BaseModel):
...
link = CharField(null=True,max_length=2710,db_index=True)
link_expanded = TextField(null=True,db_index=True)
title = TextField(null=True,db_index=True)
text = TextField(null=True)
...
django-elasticsearch-dsldocuments.py文件的相关部分:
@registry.register_document
class LinkDenorm(Document):
link_expanded = fields.KeywordField(attr='link_expanded')
class Index:
name = 'denorms_v10'
class Django:
model = models.LinkDenorm
fields = [
...
'link','title','text',...
]
数据成功建立索引后,我确认索引包含正确的字段:
curl -X GET -u <myuser>:<mypasswd> "http://<my-hostname>/denorms_v10/?pretty"
{
"denorms_v10" : {
"mappings" : {
"properties" : {
...
"link" : {
"type" : "text"
},"title" : {
"type" : "text"
},"text" : {
"type" : "text"
}
"link_expanded" : {
"type" : "keyword"
},...
}
}
}
}
一段时间(有时是几周,有时是几天)后,索引字段将更改。执行与以前相同的CURL查找会给我:
curl -X GET -u <myuser>:<mypasswd> "http://<my-hostname>/denorms_v10/?pretty"
{
"denorms_v10" : {
"mappings" : {
"properties" : {
...
"link" : {
"type" : "text","fields" : {
"keyword" : {
"type" : "keyword","ignore_above" : 256
}
}
},"title" : {
"type" : "text","text" : {
"type" : "text","link_expanded" : {
"type" : "text",...
}
}
}
}
更改发生后,查询失败,因为数据类型不正确。在调查了elasticsearch和django日志之后,没有任何东西可以提供有关该索引会发生什么的线索。
我有点迷失了思路。任何建议都是最欢迎的。谢谢!
解决方法
Miha,您的索引可能使用一种没有任何索引模板的ILM。
您查询别名,并且别名正在更改。
您一方的某个过程会定期删除索引(取决于索引的大小或其中的文档数量)
然后,当您的应用再次发布信息时,它将使用默认的Elastic映射重新创建索引。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。