2014-10-28 145 views
0

我嘗試使用ES的搜索模板來執行條件子句here。我正在將我的請求發送到/ [my_index]/_ search/template端點。由於JSON解析問題,請求失敗,這很有意義,因爲在添加條件子句之後,負載不再是有效的JSON。我應該如何使用搜索模板?是否有非JSON模板的指定端點?Elasticsearch搜索模板

+0

您是否嘗試將模板存儲爲'config/scripts'目錄中的文件?參見[文檔中的預先註冊的模板](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-template.html#_pre_registered_template)。 – Thorsten 2014-10-28 19:11:56

回答

0

您需要在包裝字符串中轉義模板。

從你引用的同一鏈接:

正如上面寫的,這個模板是不是有效的JSON,因爲它包括 部分標記像{{#line_no}}。爲此,模板 要麼被存儲在一個文件中(參見稱爲 節「預註冊templateedit」)通過REST API一起使用時,或者,應該 寫成一個字符串:

「模板「:{\」query \「:{\」filtered \「:{\」query \「:{\」match \「:{\」line \「:\」{{text}} \「}}」 ,\ 「過濾器\」:{{{#LINE_NO}} \ 「範圍\」:{\ 「LINE_NO \」:{{{#開始}} \ 「GTE \」:\ 「{{開始}} \」{ {#END}},{{/結束}} {{/啓動}} {{#結束}} \ 「LTE \」:\ 「{{端}} \」{{/結束}}}} {{/ 「

2

當使用條件子句時,模板將不是有效的JSON,因爲它將包含段標記{{#像這樣}}。原因,模板應該存儲在一個文件中,或者當通過REST API使用時,應該寫成一個字符串。

方法1:存儲在一個文件

  1. 保存模板的配置/腳本的查詢部分

    ES安裝>配置>腳本

    test_template tempalte。小鬍子

    { 
        "query":{ whatever query } 
    } 
    
  2. 您可以通過此方法通過使用感保存的模板

    GET /_search/template 
    { 
        "template": "test_template", 
        "params": { 
         whatever params 
        } 
    } 
    

方法2:模板作爲字符串寫入

  1. 模板轉換爲字符串形式和通過休息api使用

    POST/_search/template/test_template { 「template」:「{\」query \「:{whatever query;記得逃脫引號}} 「 }

  2. 要搜索使用這個模板,

    GET/_search /模板 { 」模板「:{ 」ID「: 」test_template「 }, 」 PARAMS「:{ 任何PARAMS }}

參考:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search-template.html#_conditional_clauses