2014-09-27 58 views
0

我正在開發基於Elasticsearch的應用程序。如何檢查SearchRequestObject的查詢,篩選和aggs參數?

我需要能夠從JSON字符串構造一個SearchRequestBuilder對象。我可以使用setSource方法並傳遞完整的JSON查詢對象作爲參數。到現在爲止還挺好。

一個例子:(Obs .:我使用Scala的Java API)。

var builder = client.java.prepareSearch("logindex*") 
    .setSource(""" 
{ 
    "query": { 
    "filtered": { 
     "query": { 
     "query_string": { 
      "query": ":mimeType:text\\/html" 
     } 
     }, 
     "filter": { 
     "range": { 
      "datetime": { 
      "gte": "2014-09-18T00:56:00", 
      "lte": "2014-09-29T00:56:00" 
      } 
     } 
     } 
    } 
    } 
}""") 

但我也確實需要能夠「檢查」以這種方式創建的對象,看看它的查詢,例如(這樣我就可以確保用戶不會試圖訪問他/她不應該的東西等等)。理想情況下,我想有像getQueryBuilder等方法。

// i know I can manipulate the previously created object like this: 
builder.addAggregation(...) 
// but can I also perhaps ask questions to the object? 
// for instance 
var query = builder.getQueryBuilder //or something like this 
// and then find out what type of query it is and maybe turn it into a filtered query 
// so I can limit what the users can view. 

我希望SearchRequestBuilder#internalBuilder可能是我一直在尋找,但我無法得到任何有用的信息。

我希望我能夠明白我的觀點,並讓自己明白。

回答

1

我認爲這樣做的更好方法是在將它設置爲源之前簡單地解析和驗證/操作JSON。有大量的斯卡拉JSON解析庫。我之前喜歡scala4s,因爲它有很好的DSL,並且有很好的文檔記錄。它也有diffing功能,這可能在你的情況下特別有用。