2014-06-15 139 views
7

我查看了Search API的文檔,但發現它們沒有足夠的描述性(儘管它們寫得很好)。我正在嘗試構建查詢,但對構建查詢時無法找到有關此問題的信息的一切查詢並無法找到相關信息,而且我無法將可在Sense中運行的查詢轉換爲可使用Java API運行的查詢。Elasticsearch Java API - 構建查詢

在意義上,我有以下幾點:

GET index/_search 
{ 
    "query": { 
    "match" : { 
     "name" : "some string" 
    } 
    } 
} 

而在我的Java代碼,我有:

node = nodeBuilder().client(true).clusterName(CLUSTER_NAME).node(); 
client = node.client(); 
QueryBuilder qb = QueryBuilders.termQuery("name", "some string"); 
SearchResponse response = client.prepareSearch("index") // 
    .setQuery(qb) // Query 
    .execute().actionGet(); 

但他們產生不同的搜索結果。我看不到它有什麼區別?還有一個很好的信息來源可能有用嗎?

回答

13

如果您希望這兩個查詢返回相同的結果,則需要使用相同類型的查詢。在你感覺查詢您正在執行匹配查詢:

"query": { 
    "match" : { 
     "name" : "some string" 
    } 
    } 

但在Java代碼中執行的是termQuery:

QueryBuilder qb = QueryBuilders.termQuery("name", "some string"); 

因此,要回答你的問題使用匹配查詢中,而不是Java代碼:

QueryBuilder qb = QueryBuilders.matchQuery("name", "some string"); 

關於你的第二個問題,它有點寬泛。我肯定會嘗試通過文檔和在這裏搜索StackOverflow。關於Java API,我會看here的概述和here的查詢信息dsl thru Java。

我認爲對Elasticsearch的工作原理以及對通過REST API的查詢機制的一些解決方法有一個很好的總體理解,對於理解Java API非常有幫助。開始的好地方:

http://joelabrahamsson.com/elasticsearch-101/

http://exploringelasticsearch.com/

http://java.dzone.com/articles/elasticsearch-getting-started

+0

感謝您的修復工作。關於我已閱讀並重新閱讀的文檔,除了您提供的其中一個鏈接外,我只是想剔除更細的點,我想我最終會到達那裏。 – Neilos

+1

是的,我發現我需要不斷閱讀一些這一切,以獲得詳細的釘牢。 ES很容易開始使用,但下面的複雜性有時會令人望而生畏。 –