我有一個Java應用程序,用於檢索存儲在ElasticSearch中的日誌。 日誌存儲像這樣(這是你從ElasticSearch檢索什麼):Elasticsearch在java中的正則表達式查詢不按預期工作
{
\t "took":1013,
\t "timed_out":false,
\t "_shards":{"total":40,"successful":40,"failed":0},
\t "hits":{"total":28,"max_score":null,"hits":
[
{
"_shard":"[logstash-2017.09.06][0]",
"_node":"_G934CTGTjKypnI_D1b1Lg",
"_index":"logstash-2017.09.06",
"_type":"logs",
"_id":"AV5WyiTlbV8ga6rEI4b8",
"_score":null,
"_source":{"@timestamp":"2017-09-06T10:44:01.691Z",
"@version":"1",
"message":"{
\"log\":\"2017-09-19 09:26:09,149 INFO [com.mycompany.class.MyClass] (default task-23) Some log to retrieve\",
\"stream\":\"stderr\",
\"docker\":{
\"container_id\":\"61b34e11002c636b289e7c40d6fbc6718e0deec58bf8a3410d598e3bd561672d\"
},
\"metadata\":{
\"container_name\":\"router\",
\"namespace_name\":\"default\",
\"cluster_name\":\"cluster\"
}
}"
},
"sort":[1504694641691]
}
]
}
}
獲取包含,例如僅日誌,單詞「信息」,我要查詢「消息」,但日誌在「日誌」內,我只想查詢「日誌」內部的單詞。
我想也許如果我查詢「message.log」它可以工作,但它沒有。它不是嵌套的json(「message」:{key:value,key:value}),它是「message」:「{string}」(有雙引號):_(
這很容易如果日誌存儲爲「日誌」:「日誌」沒有別的,但我不能改變將日誌放入ElasticSearch的logstash的行爲。所以我嘗試使用正則表達式(QueryBuilder。 regexpQuery(「信息」,「Some_regex」))具有以下的正則表達式:
.*\"log\\\":\\\".*INFO.*},\\\"metadata\\\":{
我知道,這個正則表達式也會影響\「流\」或\「泊塢窗\」,但它不是一個問題
我測試了這個正則表達式在http://regexr.com/和https://regex101.com/它應該工作,但是當我做查詢時,我發現0結果(並且應該有結果)。
我試錯測試了正則表達式,但如果我以後
.*\"log\\\":\\\".*INFO
我不是很習慣正則表達式添加任何東西都沒有發現的結果,我也想成功地完成它沒有你幫助,但我現在有點失落...
謝謝你提前,並抱歉我的英語不好。謝謝!
我感謝你的幫助,但它不是Java誰需要使用這個表達式(用圖案和匹配器),它elasticsearch使用regexpQuery的。在正則表達式工作的java中,但是當我使用它反對elasticsearch時,它不會,查詢不會受到該正則表達式的任何'命中'。 –
正則表達式也使用'javascript'方言。你可以試試嗎? –