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;
    }
时间: 2024-10-10 23:36:16

ElasticSearch 数据的检索的相关文章

用 mongodb + elasticsearch 实现中文检索

而 elasticsearch 可以很好的支持各种语言的全文检索,但我们暂时又不想切换到 elasticsearch 作为后端数据库. 当然,可以在 web 应用中存储数据的时候,再主动写一份到 elasticsearch,但这无疑污染了原有的业务逻辑. 在 IT 行业,只要有需求的地方,必然早已有了一堆好用或者不好用的开源轮子. 幸运地是,现在已经有了一些转换方案,可以将 mongodb 中的数据自动导入到 elasticsearch 中,让 elasticsearch 提供中文智能检索. 转

[转] [Elasticsearch] 数据建模 - 处理关联关系(1)

[Elasticsearch] 数据建模 - 处理关联关系(1) 标签: 建模elasticsearch搜索搜索引擎 2015-08-16 23:55 6958人阅读 评论(0) 收藏 举报 分类: Search(43) Elasticsearch(43) 目录(?)[+] 数据建模(Modeling Your Data) ES是一头不同寻常的野兽,尤其是当你来自SQL的世界时.它拥有很多优势:性能,可扩展性,准实时的搜索,以及对大数据的分析能力.并且,它很容易上手!只需要下载就能够开始使用它了

数据分页处理系列之一:Oracle表数据分页检索SQL

  关于Oracle数据分页检索SQL语法,网络上比比皆是,花样繁多,本篇也是笔者本人在网络上搜寻的比较有代表性的语法,绝非本人原创,贴在这里,纯粹是为了让"数据分页专题系列"看起来稍微完整和丰满一些,故先在这里特别声明一下,以免招来骂声一片! 先介绍两个比较有代表性的数据分页检索SQL实例. 无ORDER BY排序的写法.(效率最高) (经过测试,此方法成本最低,只嵌套一层,速度最快!即使检索的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT RO

基于本体的地学数据语义检索(简介)

硕士期间做了基于本体的地学数据语义检索方面的工作,首先是传统的全文检索查询600Ma(Ma表示百万年,这里都是指百万年前): 然后是基于本体的语义检索查询结果:(600Ma处于震旦纪.下震旦世.元古宙等地质年代时间内) 具体方法会在论文中论述,此处省略4万字...(请不要打脸)

asp.net 导出word格式的数据,检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败 错误: 80070005

asp.net 导出word格式的数据,检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败 错误: 80070005 以下是该问题修改方案: 一.在 计算机——> 控制面板——> 管理工具——> 组件服务 下(或者 开始——>运行 ——>dcomcnfg.exe ) 二. 计算机——> 我的电脑——>DCOM配置 找到Microsoft Word  文档(该名称不同的机器有可能不同)

《Python 数据分析》笔记&mdash;&mdash;数据的检索、加工与存储

数据的检索.加工与存储 1.利用Numpy和pandas对CSV文件进行写操作 对CSV文件进行写操作,numpy的savetxt()函数是与loadtxt()相对应的一个函数,他能以诸如CSV之类的区隔型文件格式保存数组: np.savetxt('np.csv',a,fmt='%.2f',delimiter=',',header="#1,#2,#3,#4") 上面的函数调用中,我们规定了用以保存数组的文件的名称.数组.可选格式.间隔符(默认为空格符)和一个可选的标题. 利用随机数组来

大规模数据如何检索?

思考:大规模数据如何检索? 如:当系统数据量上了10亿.100亿条的时候,我们在做系统架构的时候通常会从以下角度去考虑问题: 1)用什么数据库好?(mysql.sybase.oracle.达梦.神通.mongodb.hbase…) 2)如何解决单点故障:(lvs.F5.A10.Zookeep.MQ) 3)如何保证数据安全性:(热备.冷备.异地多活) 4)如何解决检索难题:(数据库代理中间件:mysql-proxy.Cobar.MaxScale等;) 5)如何解决统计分析问题:(离线.近实时) 原

elasticdump 迁移 elasticsearch 数据

elasticdump 迁移 elasticsearch 数据 elasticdump github地址 https://github.com/taskrabbit/elasticsearch-dump 折腾了一会nodejs耐心尽失,果断使用docker方式. 1.下载docker镜像 拉取镜像 docker pull taskrabbit/elasticsearch-dump 2.导出数据 如果将数据导出为文件形式,需要将宿主机目录挂载至容器上. # 提前创建数据目录. mkdir /dat

ES 24 - 如何通过Elasticsearch进行聚合检索 (分组统计)

目录 1 普通聚合分析 1.1 直接聚合统计 1.2 先检索, 再聚合 1.3 扩展: fielddata和keyword的聚合比较 2 嵌套聚合 2.1 先分组, 再聚合统计 2.2 先分组, 再统计, 最后排序 2.3 先分组, 组内再分组, 然后统计.排序 1 普通聚合分析 1.1 直接聚合统计 (1) 计算每个tag下的文档数量, 请求语法: GET book_shop/it_book/_search { "size": 0, // 不显示命中(hits)的所有文档信息 &qu