`
m635674608
  • 浏览: 5043501 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

使用Java调用ElasticSearch提供的相关API进行数据搜索完整实例演示

 
阅读更多

安装包下载
当前最新版本为:0.20.6
http://www.elasticsearch.org/download/ 

官方视频教程
http://www.elasticsearch.org/videos/

Window环境
下载完解开有以下个包:
bin是运行的脚本,config是设置文件,lib是放依赖的包。

启动解压目录下的bin名称的文件夹,双击elasticsearch.bat文件,就可以启动elasticsearch,启动成功界面如下:

启动成功后,会在解压目录下增加2个文件件,data用于数据存储, logs用于日志记录,可以自己创建plugins目录中用于放置自己的插件。

此时可以在浏览器中输入http://localhost:9200/

"ok" : true, 
"status" : 200, 
"name" : "Glob Herman", 
"version" : { "number" : "0.20.6", "snapshot_build" : false }, "tagline" : "You Know, for Search" }

出现上面结果,表示成功启动!

 

集成分词器的ElasticSearch下载地址:

https://github.com/medcl/elasticsearch-rtf

 

Java模拟简单搜索

实体类

复制代码
package org.dennisit.entity;
/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-8    下午04:51:03
 *     
 *  @function: TODO        
 *
 */
public class Medicine {

    private Integer id;
    private String name;
    private String function;
    
    public Medicine() {
        super();
    }

    public Medicine(Integer id, String name, String function) {
        super();
        this.id = id;
        this.name = name;
        this.function = function;
    }
    
    //getter and  setter ()
}
复制代码

模拟数据

复制代码
package org.dennisit.entity;
import java.util.ArrayList;
import java.util.List;
import org.dennisit.util.JsonUtil;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-8    上午11:38:15
 *     
 *  @function: TODO        
 *
 */
public class DataFactory {
    
    public static DataFactory dataFactory = new DataFactory();
    
    private DataFactory(){
        
    }
    
    public DataFactory getInstance(){
        return dataFactory;
    }
    
    public static List<String> getInitJsonData(){
        List<String> list = new ArrayList<String>();
        String data1  = JsonUtil.obj2JsonData(new Medicine(1,"银花 感冒 颗粒","功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"));
        String data2  = JsonUtil.obj2JsonData(new Medicine(2,"感冒  止咳糖浆","功能主治:感冒止咳糖浆,解表清热,止咳化痰。"));
        String data3  = JsonUtil.obj2JsonData(new Medicine(3,"感冒灵颗粒","功能主治:解热镇痛。头痛 ,清热。"));
        String data4  = JsonUtil.obj2JsonData(new Medicine(4,"感冒  灵胶囊","功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"));
        String data5  = JsonUtil.obj2JsonData(new Medicine(5,"仁和 感冒 颗粒","功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。"));
        list.add(data1);
        list.add(data2);
        list.add(data3);
        list.add(data4);
        list.add(data5);
        return list;
    }
}
复制代码

应用工具类

复制代码
package org.dennisit.util;
import java.io.IOException;
import org.dennisit.entity.Medicine;
import org.elasticsearch.common.xcontent.XContentBuilder;
import org.elasticsearch.common.xcontent.XContentFactory;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-8    上午11:34:56
 *     
 *  @function: TODO        
 *
 */
public class JsonUtil {

    /**
     * 实现将实体对象转换成json对象
     * @param medicine    Medicine对象
     * @return
     */
    public static String obj2JsonData(Medicine medicine){
        String jsonData = null;
        try {
            //使用XContentBuilder创建json数据
            XContentBuilder jsonBuild = XContentFactory.jsonBuilder();
            jsonBuild.startObject()
            .field("id",medicine.getId())
            .field("name", medicine.getName())
            .field("funciton",medicine.getFunction())
            .endObject();
            jsonData = jsonBuild.string();
            System.out.println(jsonData);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return jsonData;
    }

}
复制代码

ElasticSearch核心搜索模拟类

复制代码
package org.dennisit.elastic.process;

import java.util.ArrayList;
import java.util.List;
import org.dennisit.entity.DataFactory;
import org.dennisit.entity.Medicine;
import org.elasticsearch.action.index.IndexRequestBuilder;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.Client;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;

/**
 * 
 *
 *  @version : 1.0
 *  
 *  @author  : 苏若年              <a href="mailto:DennisIT@163.com">发送邮件</a>
 *    
 *  @since   : 1.0        创建时间:    2013-4-8    上午11:34:04
 *     
 *  @function: TODO        
 *
 */
public class ElasticSearchHandler {

    private Client client;

    public ElasticSearchHandler(){    
        //使用本机做为节点
        this("127.0.0.1");
    }
    
    public ElasticSearchHandler(String ipAddress){
        //集群连接超时设置
        /*  
              Settings settings = ImmutableSettings.settingsBuilder().put("client.transport.ping_timeout", "10s").build();
            client = new TransportClient(settings);
         */
        client = new TransportClient().addTransportAddress(new InetSocketTransportAddress(ipAddress, 9300));
    }
    
    
    /**
     * 建立索引,索引建立好之后,会在elasticsearch-0.20.6\data\elasticsearch\nodes\0创建所以你看
     * @param indexName  为索引库名,一个es集群中可以有多个索引库。 名称必须为小写
     * @param indexType  Type为索引类型,是用来区分同索引库下不同类型的数据的,一个索引库下可以有多个索引类型。
     * @param jsondata     json格式的数据集合
     * 
     * @return
     */
    public void createIndexResponse(String indexname, String type, List<String> jsondata){
        //创建索引库 需要注意的是.setRefresh(true)这里一定要设置,否则第一次建立索引查找不到数据
        IndexRequestBuilder requestBuilder = client.prepareIndex(indexname, type).setRefresh(true);
        for(int i=0; i<jsondata.size(); i++){
            requestBuilder.setSource(jsondata.get(i)).execute().actionGet();
        }     
         
    }
    
    /**
     * 创建索引
     * @param client
     * @param jsondata
     * @return
     */
    public IndexResponse createIndexResponse(String indexname, String type,String jsondata){
        IndexResponse response = client.prepareIndex(indexname, type)
            .setSource(jsondata)
            .execute()
            .actionGet();
        return response;
    }
    
    /**
     * 执行搜索
     * @param queryBuilder
     * @param indexname
     * @param type
     * @return
     */
    public List<Medicine>  searcher(QueryBuilder queryBuilder, String indexname, String type){
        List<Medicine> list = new ArrayList<Medicine>();
        SearchResponse searchResponse = client.prepareSearch(indexname).setTypes(type)
        .setQuery(queryBuilder)
        .execute()
        .actionGet();
        SearchHits hits = searchResponse.hits();
        System.out.println("查询到记录数=" + hits.getTotalHits());
        SearchHit[] searchHists = hits.getHits();
        if(searchHists.length>0){
            for(SearchHit hit:searchHists){
                Integer id = (Integer)hit.getSource().get("id");
                String name =  (String) hit.getSource().get("name");
                String function =  (String) hit.getSource().get("funciton");
                list.add(new Medicine(id, name, function));
            }
        }
        return list;
    }
    
    
    public static void main(String[] args) {
        ElasticSearchHandler esHandler = new ElasticSearchHandler();
        List<String> jsondata = DataFactory.getInitJsonData();
        String indexname = "indexdemo";
        String type = "typedemo";
        esHandler.createIndexResponse(indexname, type, jsondata);
        //查询条件
        QueryBuilder queryBuilder = QueryBuilders.fieldQuery("name", "感冒");
        /*QueryBuilder queryBuilder = QueryBuilders.boolQuery()
          .must(QueryBuilders.termQuery("id", 1));*/
        List<Medicine> result = esHandler.searcher(queryBuilder, indexname, type);
        for(int i=0; i<result.size(); i++){
            Medicine medicine = result.get(i);
            System.out.println("(" + medicine.getId() + ")药品名称:" +medicine.getName() + "\t\t" + medicine.getFunction());
        }
    }
}
复制代码

启动ElasticSearch(windowbin/elasticsearch.bat)



程序运行前,默认的nodes目录下没有内容,运行程序后会建立如下目录

控制台输出信息

复制代码
{"id":1,"name":"银花 感冒 颗粒","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}
{"id":2,"name":"感冒  止咳糖浆","funciton":"功能主治:感冒止咳糖浆,解表清热,止咳化痰。"}
{"id":3,"name":"感冒灵颗粒","funciton":"功能主治:解热镇痛。头痛 ,清热。"}
{"id":4,"name":"感冒  灵胶囊","funciton":"功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。"}
{"id":5,"name":"仁和 感冒 颗粒","funciton":"功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。"}
查询到记录数=5
(4)药品名称:感冒  灵胶囊        功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。
(1)药品名称:银花 感冒 颗粒        功能主治:银花感冒颗粒 ,头痛,清热,解表,利咽。
(2)药品名称:感冒  止咳糖浆        功能主治:感冒止咳糖浆,解表清热,止咳化痰。
(3)药品名称:感冒灵颗粒        功能主治:解热镇痛。头痛 ,清热。
(5)药品名称:仁和 感冒 颗粒        功能主治:疏风清热,宣肺止咳,解表清热,止咳化痰。
复制代码

集群管理工具Head查看信息

附录:

ElasticSearch安装插件elasticsearch-head插件


安装完之后,lasticsearch-0.20.6\plugins\目录下就多了head插件

直接打开目录中的index.html文件即可进入管理工具
 

在此感谢好友李志,林帆,天天天蓝 学习时给予指导.
转载请注明出处:[http://www.cnblogs.com/dennisit/archive/2013/04/08/3008631.html]

分享到:
评论

相关推荐

    elasticsearch java操作的api实例

    总之,Elasticsearch的Java API提供了丰富的功能,使我们能够高效地管理和搜索数据。通过深入理解并实践这些API,开发者可以充分利用Elasticsearch的强大搜索和分析能力,实现高性能、可扩展的分布式搜索解决方案。

    java elasticsearch5.1.1,java Demo

    Java连接Elasticsearch 5.1.1的客户端Demo是一个示例程序,它演示了如何在Java应用程序中与Elasticsearch服务器进行交互。Elasticsearch是一个开源的分布式搜索引擎,广泛用于大数据分析、日志聚合、实时搜索等领域...

    Elasticsearch2.3.3java程序样例

    本项目提供的Java连接样例是开发者使用Java API与Elasticsearch进行交互的一个实例,旨在帮助初学者快速理解如何在Java环境中操作Elasticsearch。Java API是Elasticsearch官方提供的客户端,能够方便地创建索引、...

    elasticsearch demo示例 源码程序

    这个压缩包包含了一个使用Java API编写的Elasticsearch基本功能的演示程序,名为"MavenDemo",意味着它是基于Maven构建系统来组织和管理依赖的。 在Elasticsearch中,我们首先需要了解的是**索引(Index)**,它是...

    bboss-elasticsearch开发环境搭建和开发入门视频教程.

    2. **bboss elasticsearch开发入门教程.wmv**: 通过实例演示,讲解如何使用BBoss进行索引操作、数据插入、查询和更新,帮助初学者快速上手。 **六、资料阅读** "说明.txt" 文件可能包含了关于这些教程的详细步骤和...

    lec.zip_elasticsearch

    综合以上信息,这个压缩包提供了在Eclipse环境下使用Java与Elasticsearch交互的实例。开发者可以通过导入`.project`文件在Eclipse中创建项目,查看`pom.xml`了解依赖,研究`lec.etl`中的数据处理逻辑,以及利用`lec....

    Elasticsearch+Maven 测试Demo

    在Java开发中,Elasticsearch作为一个强大的全文搜索引擎,常被用于处理大量数据的检索与分析。Maven作为项目管理工具,可以帮助我们管理和构建项目,使得依赖管理和构建流程标准化。本测试Demo将演示如何结合两者,...

    Elasticsearch核心技术与实战 笔记

    - **定义**:ELK Stack是由Elasticsearch、Logstash和Kibana组成的开源软件集合,旨在提供全面的数据抽取、搜索分析和数据可视化解决方案。近年来,随着Elastic Stack的发展,还加入了如Beats和Elastic Cloud等新...

    es整合springboot-elasticsearch-demo.zip

    这个项目可能是为了演示如何在Spring Boot应用中设置和使用Elasticsearch,以便进行高效的数据存储、检索和分析。 **描述解析:** "es整合springboot-elasticsearch-demo" 描述进一步确认了这是一个演示如何整合这...

    elasticsearch5.X 安装和head插件安装

    Elasticsearch(简称ES)是一款基于Lucene的开源全文搜索引擎,提供分布式、RESTful风格的搜索和数据分析功能。在5.x版本中,它增强了性能,优化了API,并引入了许多新特性。本文将详细介绍如何在本地环境中安装...

    springboot-elasticsearch-example

    本项目"springboot-elasticsearch-example"旨在演示如何将Spring Boot与Elasticsearch整合,以实现快速、便捷的数据检索功能。以下是关于这两个技术及其整合的详细知识: **Spring Boot** Spring Boot是由Pivotal...

    ES核心知识篇part2

    本知识篇主要涵盖了Elasticsearch(简称ES)的核心概念和技术,包括分布式文档系统、搜索引擎原理、Java API的使用、索引管理和内核优化等方面,旨在帮助读者深入理解并掌握ES在实际应用中的关键技能。 **1. 分布式...

    Android API Demo 源码

    ApiDemos提供了创建和使用内容提供者的例子,展示如何读取和写入SQLite数据库,以及如何通过Uri进行数据操作。 ### 3. 活动(Activity)与意图(Intent) 活动是Android应用的基本单元,负责用户界面的显示。ApiDemos...

    一站式掌握elastic search基础与实战视频资源-百度云链接

    视频资源太大,这里提供百度云链接: 资源包括项目源码和所需的数据: 01-1 _课程导学~1.mp4 01-2 说明和建议~1.mp4 02-1 -术语介绍 .mp4 02-2 Document介绍.mp4 02-3 index介绍 .mp4 02-4 -restapi介绍 .mp4 02-5 -...

    security-demo:OWASP TOP10&ESAPI 演示

    【标题】"security-demo:OWASP TOP10&ESAPI 演示"涉及的是网络安全领域,特别是针对Java开发的安全实践。OWASP(Open Web Application Security Project)是开放网络应用程序安全项目,它发布了一份名为“OWASP ...

    spring-cloud-stream-kafka-elasticsearch:该项目的目标是实现由五个Spring Boot应用程序组成的“新闻”处理管道:生产者API,分类程序服务,收集器服务,发布者API和新闻客户端

    本项目“spring-cloud-stream-kafka-elasticsearch”就是一个实例,它演示了如何使用这些技术来创建一个新闻处理管道,涵盖了从数据生成到消费的全过程。 首先,我们来看项目的核心组成部分: 1. **生产者API**:...

    安卓开发-ApiDemos.zip

    ApiDemos可能包含一个或多个内容提供者的实例,展示如何实现和使用它们。 5. **服务(Service)**: Service是后台运行的组件,可以处理长时间运行的任务。ApiDemos会演示如何启动、绑定服务,以及服务生命周期的...

    android编程实例

    在Android编程领域,掌握实际的代码实例至关重要,因为它们能帮助开发者从理论过渡到实践,深化对Android平台的理解。这个名为"android编程实例"的压缩包包含了一系列的源码,覆盖了从基础的用户界面设计到复杂的...

    wlbc.zip_JAVA3D做一个伞_java3d_java3d 示例_webgl

    在"wlbc.zip"压缩包中,可能包含了演示如何使用JAVA3D来创建一个伞的实例代码。伞的建模通常涉及到多个几何形状的组合,例如圆顶、伞柄和伞骨。JAVA3D允许开发者使用基本的3D几何形状(如球体、立方体、圆柱体)以及...

Global site tag (gtag.js) - Google Analytics