使用字段作为数组查找所有elasticsearch文档

时间:2015-09-24 17:53:03

标签: elasticsearch

我有一个带有字段('fieldA')的文档,它可以包含字符串或字符串数​​组。实际上,我更喜欢它只包含字符串,但弹性搜索映射不起作用。无论如何,现在我需要找到这个字段是数组的每个文档。我怎么能这样做?

1 个答案:

答案 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中替换了脚本过滤器。