2016-05-12 84 views
2

我想用一個特定的字段使用Java Api更新我的一些索引數據。我已經提到這個文件https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/java-docs-update.html並創建了一個java程序。我的Java程序如下所示:使用Java在elasticsearch中更新多個文檔。我正在使用Elasticsearch 2.3.2

public class App { 

    public static void main(String[] args) throws Exception { 
    Client client = TransportClient.builder().build().addTransportAddress(
     new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 
      9300)); 
UpdateRequest updateRequest = new UpdateRequest("pibindex", "SearchTech", 
     "http://www.sea.com/bundle") 
      .script(new Script("ctx._source.default_collection = \"true\"")); 
    client.update(updateRequest).get(); 
    } 
} 

此程序正在基於腳本更新單個文檔。 「pibindex」是我的索引名稱,「SearchTech」是我的索引類型,「http://www.sea.com/bundle」是我的文檔的ID。我想用一個新字段「wiki_collection」更新多個文檔:true,它與「http://www.sea.com/bundle」這樣的模式匹配。我想使用通配符查詢。

我試圖用Java實現這個elasticsearch查詢:

POST /pibindex2/_update_by_query 
{ 
    "script": { 
    "inline": "ctx._source.wiki_collection=true" 
    }, 
     "query": { 
     "wildcard": { 
      "url": { 
      "value": "http://www.sea.com/bundle/*" 
      } 
     } 
     } 
} 

很抱歉,如果我失去了一些東西明顯。謝謝。

+1

這個答案可能有幫助:http://stackoverflow.com/a/37042003/4604579 – Val

+0

@Val我提到你的答案,現在我可以通過使用「termquery」來更新多個文檔。但我必須使用「通配符查詢」來更新與模式匹配的多個文檔。我已經提到這個鏈接:https://www.elastic.co/guide/en/elasticsearch/client/java-api/1.6/wildcard.html,但它不顯示如何在java中使用通配符 – Rose

回答

3

你可以試試這個方法:

import static org.elasticsearch.index.query.QueryBuilders.wildcardQuery; 

BulkIndexByScrollResponse r = ubqrb.source("twitter") 
    .script(script) 
    .filter(wilcardQuery("url", "http://www.sea.com/bundle/*")) 
    .get(); 

雖然結果將取決於你的url字段是否進行了分析與否。

+0

我的「網址「字段未被分析,但您的代碼正在工作。非常感謝。過去兩天我被困在這件事上,官方文件沒有那麼有用。再次感謝。 – Rose

+0

真棒,很高興它幫助! – Val

相關問題