[英]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.