簡體   English   中英

ElasticSearch使用Java API進行全文搜索

[英]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方法即可檢索相關數據。

看起來彈性搜索中的termQuery使用了Lucence的搜索語法。 根據Lucene文檔 ,“*”通配符不允許作為搜索的第一個術語。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM