我目前已經存儲在ElasticSearch我與集成測試中產生一個相當簡單的文件:ElasticSearch似乎不支持陣列查找
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "unit-test_project600",
"_type" : "recordDefinition505",
"_id" : "400",
"_score" : 1.0, "_source" : {
"field900": "test string",
"field901": "500",
"field902": "2050-01-01T00:00:00",
"field903": [
"Open"
]
}
} ]
}
}
我想過濾用於特異性field903和值「打開「,因此我執行以下查詢:
{
query: {
filtered: {
filter: {
term: {
field903: "Open",
}
}
}
}
}
這不會返回任何結果。不過,我可以與其他領域的使用,它將返回記錄:
{
query: {
filtered: {
filter: {
term: {
field901: "500",
}
}
}
}
}
這樣看來,我無法在ElasticSearch陣列搜索。我已經閱讀了幾個有類似問題的人的例子,但他們都沒有解決它。當然,這不是ElasticSearch的限制嗎?
我認爲這可能是一個映射問題。這裏是我的映射:
{
"unit-test_project600" : {
"recordDefinition505" : {
"properties" : {
"field900" : {
"type" : "string"
},
"field901" : {
"type" : "string"
},
"field902" : {
"type" : "date",
"format" : "dateOptionalTime"
},
"field903" : {
"type" : "string"
}
}
}
}
}
然而,ElasticSearch docs表明,有一個字符串或數組映射之間沒有區別,所以我不認爲我需要在這裏做任何改變。
在數組中搜索沒有問題,這是別的。 – ramseykhalaf
也請告訴我這些不是字段名稱!名字應該告訴你關於這個領域的一些事情,一個新的開發人員如何能夠理解這一點? – ramseykhalaf
@ramseykhalaf:我以爲有人會這麼說。這些字段實際上是從數據庫生成的自定義字段名稱,因爲軟件的用戶可以自定義存儲的字段。開發人員不會寫這個查詢;該查詢將由軟件自動生成。我想你可能會爭辯說,我們可能會以某種方式爲該字段生成一個包含主鍵和字段名的字段,但我並不認爲這是必要的,並且可能是脆弱的。 –