2013-07-17 161 views
4

現在我想在字段中搜索id。id搜索elasticsearch

builder.startObject().startObject(TYPE_SERIES).startObject("properties"); 

    builder.startObject(ID) 
      .field("type", "long") 
      .field("store", "yes") 
      .field("index", "analyzed") 
      .field("analyzer", "test_analyzer") 
      .endObject(); 

    builder.startObject(TITLE) 
      .field("type", "string") 
      .field("store", "yes") 
      .field("index", "analyzed") 
      .field("analyzer", "test_analyzer") 
      .field("boost", "10") 
      .endObject(); 

我試圖尋找ID是這樣的:

.setQuery(QueryBuilders.multiMatchQuery(query, 
         ID, TITLE)) 

BTW,我可以得到ID結果,而不是我不能標題檢索。 我只是用id搜索以獲取結果。

所以我改變了這個。 我使用MultiSearchResponse,以便我試圖執行兩個查詢的孩子。

一個是

.setQuery(QueryBuilders.idsQuery(TYPE).ids(query)) 

另一個是

.setQuery(QueryBuilders.multiMatchQuery(query, 
              TITLE,DESCRIPTION)) 

不幸的是,我只是得到與標題或描述導致。 如果我搜索ID,我無法得到任何結果。

================ 我想執行這樣

curl -XGET localhost:9200/test/series/99 

我想獲得ID結果。不幸的是,我不太清楚如何用JAVA API編寫這段代碼。

請讓我知道。謝謝。

+0

硬不知道該說些什麼,你正在尋找和你的文件看起來像。此外,請使用get mapping API檢查提交的映射是什麼樣子,以確保它符合您的期望。 – javanna

+0

我想在現有的數據庫表中搜索標題,編號,描述。現在我可以搜索標題和描述。但我很難找到身份證。當我在multiMatchQuery中添加id字段時,我可以從id獲得結果,但是我沒有從其他字段得到任何結果。這是我的問題。 – Soo

+0

@Soo,你能提供一個完整的例子,可以運行,看看發生了什麼? – imotov

回答

3

有一個_id字段,您可以搜索英寸因此,捲曲http://localhost:9200/_search?q=_id:99+AND+_type:series+AND+_index:testhttp://localhost:9200/test/series/_search?q=_id:99應該做的伎倆。

3

就像以前的人所說的,一個完整的例子會有所幫助。但是,假設你正在尋找你的文件類型是「串聯」:

.setQuery(QueryBuilders.idsQuery("series").addIds("99")); 

還是有點更加完整:

SearchResponse esResponse = esClient.prepareSearch("test") 
       .setQuery(QueryBuilders.idsQuery("series").addIds("99")) 
       .execute().actionGet();