我有一个带有字段('fieldA')的文档,它可以包含字符串或字符串数组。实际上,我更喜欢它只包含字符串,但弹性搜索映射不起作用。无论如何,现在我需要找到这个字段是数组的每个文档。我怎么能这样做?
答案 0 :(得分:1)
这个怎么样:
{
"query" : {
"filtered" : {
"filter" :{
"script" : {
"script" : "_source.fieldA.getClass() != String"
}
}
}
}
}
我必须启用特定的Elasticsearch设置才能在较新版本的Elasticsearch中使用该脚本。
script.engine.groovy.inline.search: on
这是我运行的脚本,用于创建示例索引并试一试:
curl -w "\n" -XDELETE localhost:9200/scrap
curl -w "\n" -XPUT localhost:9200/scrap/ -d '
index :
number_of_replicas : 0
'
curl -w "\n" -XPUT localhost:9200/scrap/script-demo/1?refresh=1 -d '{
"fieldA" : "test string 1"
}'
curl -w "\n" -XPUT localhost:9200/scrap/script-demo/2?refresh=1 -d '{
"fieldA" : [
"test string 1",
"test string 2"
]
}'
curl -w "\n" -XPUT localhost:9200/scrap/script-demo/3?refresh=1 -d '{
"fieldA" : [
"test string 1"
]
}'
curl -w "\n" -XPOST localhost:9200/scrap/script-demo/_search -d '{
"query" : {
"filtered" : {
"filter" :{
"script" : {
"script" : "_source.fieldA.getClass() != String"
}
}
}
}
}' | python -m json.tool
# curl -w "\n" -XDELETE localhost:9200/scrap
当然,我正在假设您可能在现场使用的分析仪,以及可能发挥作用的细节。
以下是有关脚本的一些资源:
看起来在v2.0中替换了脚本过滤器。