2013-07-30 26 views
0

如何構建查詢JSON,以便在過濾時檢查是否存在外部參數。Elasticsearch參數存在

{"query": { 
    "filtered": { 
     "query": { 
      "match_all": {} 

}}}, 
"filter": { 
"and": { 
    "filters": [ 
     { 
      "term": { 
      "locality_name": params[:locality_name] if params[:locality_name].present? 
      } 

     } 
    ] 
} 
}}: 

JSON中的if子句是查詢DSL的無效語法。

+0

是存儲在文件中的參數,抑或是由客戶端發送到服務器elasticsearch之前設置? – ramseykhalaf

+0

PARAMS像在被傳遞到服務器 – user2512324

+0

外部參數,如果你知道你創建查詢之前只是不加濾網,如果參數不存在(有一個'如果(PARAM){fquery是否存在PARAMS =新filteredQuery(); fquery.query = oldquery; fquery.filter =新termfilter( 「處所名稱」,params.localityname);}'我缺少的東西 – ramseykhalaf

回答

0

我認爲你可以結合existFiltertermFilterand這樣的過濾器。 這將檢索locality_name字段存在且locality_name字段值等於您指定的值的文檔。

"filter" : { 
      "and" : [ 
       { 
        "exists" : { "field" : "locality_name" } 
       }, 
       { 
        "term" : { "locality_name" : "your_locality_name" } 
       } 
      ] 
     } 

http://www.elasticsearch.org/guide/reference/query-dsl/exists-filter/

http://www.elasticsearch.org/guide/reference/query-dsl/and-filter/

+0

謝謝,Dhivya.I發現以不同的方式對疑難問題中添加的散列'locality_name'到主'query'變量?只有當'params [:locality_name]'出現時纔會出現ruby文件,我也會試試。 – user2512324