1. 程式人生 > >ElasticSearch 數據的檢索

ElasticSearch 數據的檢索

通過 arc ons 返回 模糊查詢 fragment tel 取整 cnblogs

  ElasticSearch 的檢索沒有Solr那麽多類別,ElasicSearch默認是模糊查詢,通過使用余弦相似度量算法來判斷keyword和檢索值的相似度,然後取出相似度最高的數據作為返回。

//檢索主體函數
    public JSONArray Query(String keyword)
    {
        //單字段查詢
        //MatchQueryBuilder query = QueryBuilders.matchQuery("poi_title", "xxxx大學");
        //多字段查詢字段
        MultiMatchQueryBuilder query = 
                QueryBuilders.multiMatchQuery(keyword, 
"poi_address","poi_title","poi_tags"); //高亮 HighlightBuilder highlight = new HighlightBuilder(); highlight.preTags("<span class = ‘highlight‘>") .postTags("</span>") .field("poi_title") .field("poi_address") .field(
"poi_tags"); //檢索設置 SearchResponse response = client.prepareSearch("pois") .setTypes("cxyword") .setQuery(query) .highlighter(highlight) .setFrom(0) .setSize(5) //從0開始,默認推薦5個
.execute() .actionGet();
//執行檢索 SearchHits hits = response.getHits(); //以json數組存儲搜索結果 JSONArray jsonArray = new JSONArray(); JSONObject jsonObject = null; System.out.println("共搜到:"+hits.getTotalHits()+"條結果"); for (SearchHit hit : hits) { jsonObject = new JSONObject(); //首先判斷該字段是否存在高亮,存在則拉取高亮,不存在則拉取整個字段 jsonObject.put("poi_title", hit.getHighlightFields().get("poi_title") != null ? getFraStr(hit.getHighlightFields().get("poi_title").getFragments()): hit.getSource().get("poi_title")); jsonObject.put("poi_address", hit.getHighlightFields().get("poi_address") != null ? getFraStr(hit.getHighlightFields().get("poi_address").getFragments()): hit.getSource().get("poi_address")); jsonObject.put("poi_tags", hit.getHighlightFields().get("poi_tags") != null ? getFraStr(hit.getHighlightFields().get("poi_tags").getFragments()): hit.getSource().get("poi_tags")); jsonObject.put("poi_lat", hit.getSource().get("poi_lat")); jsonObject.put("poi_lng", hit.getSource().get("poi_lng")); jsonObject.put("poi_photel", hit.getSource().get("poi_photel")); jsonObject.put("id", hit.getId()); jsonArray.add(jsonObject); } return jsonArray; }

ElasticSearch 數據的檢索