簡體   English   中英

查找所有彈性搜索文檔,其字段為數組

[英]Find all elasticsearch documents with a field that is an array

我有一個帶有字段('fieldA')的文檔,該字段可以包含一個字符串或字符串數​​組。 實際上,我更希望它只包含字符串,但是elasticsearch映射不能那樣工作。 無論如何,現在我需要查找此字段是數組的每個文檔。 我怎樣才能做到這一點?

這個怎么樣:

{
    "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中被替換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM