[英]ElasticSearch full text search using Java API
我最近開始探索搜索世界,並嘗試使用ES作為MongoDB的索引。 我成功地將它們集成在一起,但我發現搜索API相當復雜和令人困惑。 Java API也沒有太大幫助。 我能找到完全匹配的內容,但如何進行全文搜索? 這是我的代碼:
Settings settings = ImmutableSettings.settingsBuilder()
.put("cluster.name", "elasticsearch").build();
Client client = new TransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress("host-ip", 9300));
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(termQuery("name", "*name*"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
我使用.setQuery(termQuery("name", "testname"))
找到"name":"testname"
沒有問題,但"name":"this is a test name"
不能與上面的例子一起使用。 我究竟做錯了什么?
在網上爬了幾個小時之后,我已經設法在javadocs的幫助下解決了這個問題。 最重要的是接口*QueryBuilder*
及其實現類。 我使用FieldQueryBuilder
進行查詢,如下面的setQuery
方法所示。
SearchResponse response = client.prepareSearch("mongoindex")
.setSearchType(SearchType.QUERY_AND_FETCH)
.setQuery(fieldQuery("name", "test name"))
.setFrom(0).setSize(60).setExplain(true)
.execute()
.actionGet();
SearchHit[] results = response.getHits().getHits();
for (SearchHit hit : results) {
System.out.println(hit.getId()); //prints out the id of the document
Map<String,Object> result = hit.getSource(); //the retrieved document
}
使用生成的Map對象,您只需調用get
方法即可檢索相關數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.