zoukankan      html  css  js  c++  java
  • ElasticSearch 数据的检索

      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;
        }
    既然选择了远方,便只顾风雨兼程
  • 相关阅读:
    jQuery Colorpicker Spectrum api 中文 文档 属性 事件 方法
    java使用dbutils工具类实现小程序 管家婆记账软件
    java实现服务端开启多线程处理客户端的上传图片请求
    java 基于tcp客户端服务端发送接收数据
    java基于udp实现键盘录入聊天
    java实现udp发送端和接收端
    java通过读取本地文件获取反射方法参数,执行对象方法
    java通过反射获取私有的构造方法,及反射擦除泛型数据类型约束
    Java反射获取类对象的三种方式
    java使用DBCP连接池创建工具类
  • 原文地址:https://www.cnblogs.com/Forever-Road/p/7289621.html
Copyright © 2011-2022 走看看