`
wbj0110
  • 浏览: 1604238 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

ES实例

阅读更多

 

安装包下载
当前最新版本为: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  : 
 *    
 *  @since   : 1.0        
 *     
 *  @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  :
 *    
 *  @since   : 
 *     
 *  @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  : 
 *    
 *  @since   :
 *     
 *  @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  :
 *    
 *  @since   : 
 *     
 *  @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文件即可进入管理工具

转自互联网

分享到:
评论

相关推荐

    python处理elasticsearch实例

    要使用Python处理Elasticsearch实例,可以使用elasticsearch库来与Elasticsearch进行交互。以下是一个简单的描述: 导入相关库:首先需要导入必要的Python库,如elasticsearch(用于与Elasticsearch建立连接和执行...

    JAVA实现ElasticSearch的简单实例

    Java实现Elasticsearch的简单实例主要涉及以下几个关键知识点: 1. **Elasticsearch基础**:Elasticsearch(ES)是一个开源的、分布式全文搜索引擎,它提供了实时数据分析的能力,广泛用于日志分析、监控、搜索应用...

    Elasticsearch实例代码

    Elasticsearch实例代码,简单演示Elasticsearch5.5下建立索引,查询,删除等操作。

    elasticsearch实例v0.1.0

    总结来说,这个Elasticsearch实例v0.1.0已经实现了基本的全文检索功能,并计划通过客户端连接池优化性能,通过标签分页提升用户体验。随着进一步的开发,它有望成为一个功能强大且高效的搜索解决方案。对于那些需要...

    java语言kafka数据批量导入到Elasticsearch实例

    消费kafka数据,然后批量导入到Elasticsearch,本例子使用的kafka版本0.10,es版本是6.4,使用bulk方式批量导入到es中,也可以一条一条的导入,不过比较慢。 &lt;groupId&gt;org.elasticsearch &lt;artifactId&gt;elastic...

    Elasticsearch7.0实例精解 源代码.zip

    Elasticsearch 7.0 实例精解源代码是一份深度解析Elasticsearch 7.0版本核心功能和实际应用的资源集合。这份压缩包包含了详细的示例代码,旨在帮助开发者更好地理解和掌握Elasticsearch的强大功能。以下是基于...

    elasticsearch实例

    最终目标是将这个Elasticsearch实例封装为一个组件,方便在其他项目中复用。这通常涉及接口设计、错误处理、配置管理等。通过定义清晰的API,其他开发者可以轻松地集成这个组件进行全文检索功能。 总之,这个实例...

    OpenGL ES实例1:上下跳动的正方形

    在这个实例“OpenGL ES实例1:上下跳动的正方形”中,我们将探讨如何使用OpenGL ES在Android平台上创建一个动态的、上下跳动的正方形。 首先,我们需要理解OpenGL ES的基本概念。它是一个状态机,通过一系列的函数...

    OpenGL ES实例3:3d翻转的球体

    在“OpenGL ES实例3:3d翻转的球体”中,我们将深入探讨如何使用OpenGL ES在Android平台上创建一个3D旋转的球体效果。 首先,要实现这个实例,我们需要对OpenGL ES的基本概念有所了解,包括顶点、坐标系统、图元、...

    基于.netcore搜索封装ElasticSearch.zip

    这个名为"基于.netcore搜索封装ElasticSearch.zip"的压缩包,显然包含了一个针对.NET Core平台的Elasticsearch客户端库,方便开发者在.NET Core应用中集成和操作Elasticsearch。 Elasticsearch是一个开源的分布式...

    OpenGL_ES 实例源代码

    OpenGL ES 是一种针对嵌入式系统的图形库,广泛应用于移动设备和嵌入式系统,如智能手机、游戏机和平板电脑等。它简化了桌面版OpenGL的复杂性,使其更适合资源有限的环境。OpenGL ES 1.1是该库的一个早期版本,主要...

    ES客户端+谷歌浏览器插件+Multi-Elasticsearch-Head

    它基于Elasticsearch-Head或者Kibana的Dev Tools Console概念,但是增加了同时连接和管理多个Elasticsearch实例或集群的能力。这意味着用户可以通过一个统一的界面执行搜索、浏览索引、管理文档、监控集群状态以及...

    elasticsearch java操作的api实例

    Elasticsearch是一个强大的开源搜索引擎,基于Lucene,它提供了分布式、实时、可扩展的数据存储和检索功能。在Java环境中操作Elasticsearch,我们通常会利用官方提供的Java API,这是一个非常全面且强大的工具集,让...

    基于python操作ES实例详解

    3. **实例的学习价值**:通过实例操作,能够更加直观和具体地了解如何运用Python对Elasticsearch实例进行操作,这对于学习和工作中使用Elasticsearch非常有帮助。 ### 描述知识点:基于python操作ES实例详解 1. **...

    opengl ES 实例

    opengl ES 实例

    elasticsearch7.17.10-最新支持Java1.8版本

    6. **多租户**:一个Elasticsearch实例可以支持多个索引,每个索引有自己的设置和映射,实现资源隔离。 **Elasticsearch 7.17.10的新特性和改进:** 1. **性能优化**:此版本可能包含了针对查询速度、索引速度以及...

    elasticsearch常用版本

    Elasticsearch是一款强大的开源搜索引擎,广泛应用于大数据分析和实时搜索领域。它基于Lucene库,提供了分布式、全文检索、近实时...在实际使用中,确保正确配置和管理Elasticsearch实例,是实现高效搜索和分析的关键。

    ElasticSearch官方测试数据

    4. **节点(Node)**:运行Elasticsearch实例的服务器称为节点,多个节点可以组成一个集群。 5. **集群(Cluster)**:由多个节点组成,共同存储和处理数据,提供高可用性和数据冗余。 ### 二、官方测试数据用途 1...

    Elasticsearch的分布式架构、负载均衡、高可用以及容错性看这一篇就够了

    开箱即用,简单粗暴...我们本机启动两个es实例,也就是两个node节点,默认集群名称是elasticsearch,所以他会自动将这两个node凑成一个集群,我们什么都不用配置,它自动发现。shard负载均衡假设我们有1个index,

    elasticsearch集成spring开发实例

    **Elasticsearch 集成 Spring 开发实例详解** 在现代大数据分析和实时搜索领域,Elasticsearch(简称 ES)已经成为了广泛使用的工具。它是一个分布式、RESTful 风格的搜索和数据分析引擎,能够处理大量数据并提供...

Global site tag (gtag.js) - Google Analytics