如果将数据插入不适合现有类型的字段,则默认情况下,Elasticsearch会引发异常。例如,如果已将字段创建为数字类型,则在该字段中插入带有字符串值的文档会导致错误。
可以通过启用ignore_malformed
设置来更改此行为,这意味着出于索引目的这些字段将被静默忽略,但是保留在_source
文档中-意味着无法搜索或汇总无效值,但仍包含在返回的文档中。
在我们的用例中,这是可取的行为,但是我们希望能够以某种方式找到此类文档,以便将来进行修复。
是否可以通过某种方式标记忽略了某些格式错误的字段的文档?我们完全控制文档的插入过程,因此我们可以修改所有插入标志,或尝试插入,或执行任何操作,以实现我们的目标。
最佳答案
您可以使用exists
查询来查找该字段不存在的文档,请参见此示例
PUT foo
{
"mappings": {
"bar": {
"properties": {
"baz": {
"type": "integer",
"ignore_malformed": true
}
}
}
}
}
PUT foo/bar/1
{
"baz": "field"
}
GET foo/bar/_search
{
"query": {
"bool": {
"filter": {
"bool": {
"must_not": [
{
"exists": {
"field": "baz"
}
}
]
}
}
}
}
}
但是,没有专用的机制,因此此搜索还会查找没有故意设置该字段的文档
关于elasticsearch - 在Elasticsearch中查找触发 `ignore_malformed`的文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45920844/