標籤:
elasticsearch 提供的API比較多,看名字差不多可以明白什麼意思
源碼地址:源碼下載點擊
public void search01() {QueryBuilder query = QueryBuilders.queryString("9");// 設定搜尋的內容和現實的大小SearchResponse res = client.prepareSearch("test").setQuery(query).setFrom(0).setSize(60).execute().actionGet();SearchHits shs = res.getHits();System.out.println("總共有資料:" + shs.getHits().length);for (SearchHit it : shs) {System.out.println(it.getSource());}}// 分組fact類似於sql的grouppublic void search02() {// 定義一個分組並為其命名TermsFacetBuilder facetBuilder = FacetBuilders.termsFacet("groupBysex");// 按照哪個欄位進行分組facetBuilder.field("sex").size(1);// 過濾器匹配所有檔案facetBuilder.facetFilter(FilterBuilders.matchAllFilter());SearchResponse res = client.prepareSearch("test2").setTypes("test02").addFacet(facetBuilder).execute().actionGet();// 擷取搜尋結果中的分組Facets facet = res.getFacets();// 多個分組是以map的形式儲存TermsFacet fac = (TermsFacet) facet.getFacets().get("groupBysex");for (TermsFacet.Entry tf : fac.entries()) {System.out.println(tf.getCount() + "======" + tf.getTerm());}}// QUERYpublic void search03() {// 按照欄位進行索引,只要內容含有即可不用全部符合QueryBuilder queryBuilder = QueryBuilders.fieldQuery("name","李四1後面有內容也可以");//整個 資料內容中只要 有 這個字即可QueryBuilder qb =QueryBuilders.queryString("四"); //組合查詢 name為 張三,sex為boy的記錄 must表示必須有,mustNot表示不包含,should表示可以存在QueryBuilder queryBuilder2 = QueryBuilders.fieldQuery("name","張三");QueryBuilder queryBuilder3 = QueryBuilders.fieldQuery("sex","boy");QueryBuilder qbmust = QueryBuilders.boolQuery().must(queryBuilder2).should(queryBuilder3);//過濾查詢QueryBuilder qb3 = QueryBuilders.filteredQuery(queryBuilder2, FilterBuilders.prefixFilter("sex", "bo") );SearchResponse res = client.prepareSearch("test").setTypes("test01").setSearchType(SearchType.DEFAULT).setQuery(qb3).execute().actionGet();SearchHits shs = res.getHits();System.out.println("共查到資料:" + shs.getHits().length);for (SearchHit it : shs) {System.out.println(it.getSource());}}// 高亮顯示public void search04() {//首碼過濾器 漢字不好用FilterBuilder fb = FilterBuilders.prefixFilter("sex", "bo");//範圍過濾FilterBuilder fb2 = FilterBuilders.rangeFilter("id").from(1).to(10); //組合過濾FilterBuilder fb3 = FilterBuilders.andFilter( FilterBuilders.rangeFilter("id").from(1).to(10), FilterBuilders.prefixFilter("sex", "bo") ).cache(true);//預設false SearchResponse res = client.prepareSearch("test").setTypes("test01").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setFilter(fb3).execute().actionGet();SearchHits shs = res.hits();System.out.println("總共有資料:" + shs.getHits().length);for (SearchHit it : shs) {System.out.println(it.getSource());}}// 高亮顯示public void search05() {QueryBuilder qb1 = QueryBuilders.termQuery("name", "張三_4");// FilterBuilder filter =FilterBuilders.prefixFilter("name", "張三");SearchResponse res = client.prepareSearch("test4").setTypes("test04").setSearchType(SearchType.DFS_QUERY_THEN_FETCH).setQuery(QueryBuilders.fieldQuery("id", "1")).addHighlightedField("id").setHighlighterPreTags("<spand>").setHighlighterPostTags("</bod>").execute().actionGet();SearchHits shs = res.hits();System.out.println("總共有資料:" + shs.getHits().length);for (SearchHit it : shs) {System.out.println(it.getSource());// 擷取對應的高亮域Map<String, HighlightField> result = it.highlightFields();// 從設定的高亮域中取得指定域HighlightField titleField = result.get("id");// 取得定義的高亮標籤String[] titleTexts = titleField.fragments();// 為title串值增加自訂的高亮標籤String title = "";for (String text : titleTexts) {title += text;}// 將追加了高亮標籤的串值重新填充到對應的對象// product.setTitle(title);// 列印高亮標籤追加完成後的實體物件System.out.println(title);}}
elasticsearch JAVA用戶端操作---搜尋的過濾、分組高亮