1
我試圖在滿足以下條件時從elasticsearch索引中提取數據。在彈性搜索查詢中使用兩個檢查
- 當
stream_id
是空字符串(例如, 「」) - 當
source_id
是一個特定的字符串(例如, 「unknown_source」)
我可以單獨使用這兩個以下查詢: 對於檢查空字符串:
{
"query": {
"filtered": {
"filter": {
"script": {
"script": "_source.stream_id.length() == 0"
}
}
}
}
}
檢查source_id
{
"query": {
"bool" : {
"must" : {
"term" : { "source_id" : "unknown_source" }
}
}
}
}
但是現在我看到'過濾'查詢在ES 2.0版中已棄用,而且我使用的是版本2.1。那麼,我怎麼和這兩個條件?我看着到過濾查詢頁面的文檔,它說
使用布爾查詢,而不是與查詢和過濾器的過濾器 條款必須的條款。
所以,然後我試着下面的查詢,但它不工作。
{
"query": {
"bool": {
"must" : {
"term" : { "source_id" : "unknown_source" }
},
"filter": {
"script": {
"script": "_source.stream_id.length() == 0"
}
}
}
}
}
第一個代碼得到一個錯誤,說'QueryParsingException [[apache_combined] [bool]查詢不支持[filter]]'。此外,我需要這兩個條件相匹配。 – Bitswazsky
我的uri是'http:// localhost:9200/apache_combined/_search?fields = message'。第二個查詢會拋出一個錯誤,說'QueryParsingException [[apache_combined]沒有註冊[script]]的查詢; }]「,'我在elasticsearch.yml中添加了'script.disable_dynamic:false'條目 – Bitswazsky
我已經更新了我的答案,例如'must'而不是'should',對此很抱歉,2.1中需要[啓用動態腳本](https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-scripting.html#enable-dynamic-scripting)with'script.inline:on' – Val