es

安装es
安装elasticsearch-head-master
启动es 里 bin
cmd进入elasticsearch-head-master
npm install -g grunt -cli
grunt server
http://localhost:9100
跨域:
D:\sturj\elasticsearch-5.6.8\config
修改:elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: “*”
访问:http://localhost:9100
在这里插入图片描述
新建索引:
1索引-》新建索引
2可以使用postman http://127.0.0.1:9200/blog 创建索引
增删改查省略
ik:
把ik放到D:\sturj\elasticsearch-5.6.8\plugins目录
测试:http://127.0.0.1:9200/_analyze?analyzer=ik_smart&pretty=true&text=我爱吃菠萝

es集群config配置
#配置跨域请求 * 所有域名可以访问
http.cors.enabled: true
http.cors.allow-origin: “*”

#集群的名称
cluster.name: my-es
#节点名称,其余两个节点分别为node-02 和node-03
node.name: node-01
#指定该节点是否有资格被选举成为master节点,默认是true,es是默认集群中的第一台机器为master,如果这台机挂了就会重新选举master
node.master: true
#允许该节点存储数据(默认开启)
node.data: true
#索引数据的存储路径
path.data: /home/elasticsearch/data/node1
#日志文件的存储路径
path.logs: /home/elasticsearch/log/node1
#设置为true来锁住内存。因为内存交换到磁盘对服务器性能来说是致命的,当jvm开始swapping时es的效率会降低,所以要保证它不swap
bootstrap.memory_lock: true
network.host: 127.0.0.1
http.port: 9201
transport.tcp.port: 9301
discovery.zen.ping.unicast.hosts: [“127.0.0.1:9301”,“127.0.0.1:9302”,“127.0.0.1:9303”]
discovery.zen.minimum_master_nodes: 2

idea:
创建项目->pom->yml
创建类 es:
//创建索引库

     @Test
    public void createIndex() throws Exception{
        //创建一个Setting对象,相当于一个配置信息,主要配置集群名称"elasticsearch"是配置里的名
        Settings setting = Settings.builder()
                .put("cluster.name","elasticsearch").build();
        //创建客户端对象
        TransportClient client = new PreBuiltTransportClient(setting);
        //9301是我定义的节点名称,为保证高可用,创建3个
        client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301));
        client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302));
        client.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
       //创建索引库
        client.admin().indices().prepareCreate("index_hello").
                //执行操作
                get();
        client.close();
    }
    @Test
    public void setMappings() throws Exception{
      Settings setting = Settings.builder()
                .put("cluster.name","elasticsearch").build();
        TransportClient client = new PreBuiltTransportClient(setting)
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9301))
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9302))
        .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"),9303));
        //创建一个mappring
        XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                //相当于左大括号
                .startObject()
                 .startObject("article")
                  .startObject("propertioes")
                   .startObject("id")
                .field("type","long")
                .field("store","true")
                .endObject()
                .startObject("title")
                .field("type","text")
                .field("store","true")
                .field("anayzer","ik_smart")
                .endObject()
                .startObject("content")
                .field("type","text")
                .field("store","true")
                .field("anayzer","ik_smart")
                .endObject()
                .endObject()
                .endObject()
                .endObject();
            //使用客户端将mapping信息设置到索引库中
        client.admin().indices()
                //设置要做映射的索引
                .preparePutMapping("index_hello")
               //设置要做映射的type
                .setType("article")
               //mapprong信息可以是xContentBuilder,也可以是json
                .setSource(xContentBuilder)
                .get();
        client.close();
    }
     @Test
    public void testAddDucument() throws Exception{
        //创建client
        XContentBuilder xContentBuilder = XContentFactory.jsonBuilder()
                .startObject()
                .field("id",1)
                .field("title","文档标题")
                .field("content","文档内容")
                .endObject();
        //文档对象添加到数据库
         Settings setting = Settings.builder()
                 .put("cluster.name","elasticsearch").build();
         TransportClient client = new PreBuiltTransportClient(setting);
         client.prepareIndex()
                 .setIndex("index_hello")
                 .setType("article")
                 .setId("1")
                 .setSource(xContentBuilder)
                 .get();
         client.close();
    }
    @Test
    //创建一个pojo类
    //使用工具类把pojo转换成json字符串
    //把文档写入索引库
    public void testAddDucumeng2()throws Exception{
        //创建一个Article对象
        Article article = new Article();
        //设置对象属性
        article.setId(1);
        article.setTitle("标题");
        article.setContent("内容的呀");
        //把article对象转换成json格式的字符串
        ObjectMapper objectMapper =new ObjectMapper();
        String json = objectMapper.writeValueAsString(article);
        //使用client把文档写入索引库
        //关闭client
        client.prepareIndex("index_hello","article","3")
                .setSource(json, XContentType.JSON)
                .get();
        client.close();
   }

二,使用es客户端实现搜索
1,根据id搜索
2,根据term查询(关键词)
3,QueryString查询方式(待分析的查询)
查询步骤
1,创建一个client
2, id/term/创建一个查询对象,QueryBuliders工具类来创建QueryBuliders对象
3,使用client执行查询
4,得到拆线呢结果。
5,取查询结果的总记录
6,取查询结果列表
7,关闭client

 @Test
    //创建一个pojo类
    //使用工具类把pojo转换成json字符串
    //把文档写入索引库
    public void testAddDucumeng2()throws Exception{
        //创建一个Article对象
        Article article = new Article();
        //设置对象属性
        article.setId(1);
        article.setTitle("标题呀");
        article.setContent("内容的呀");
        //把article对象转换成json格式的字符串
        ObjectMapper objectMapper =new ObjectMapper();
        String json = objectMapper.writeValueAsString(article);
        //使用client把文档写入索引库
        //关闭client
        client.prepareIndex("index_hello","article","3")
                .setSource(json, XContentType.JSON)
                .get();
        client.close();
     }
     private void  search(QueryBuilder queryBuilder) throws Exception{
         //执行查询
         SearchResponse searchResponse = client.prepareSearch("index_hello")
                 .setTypes("article")
                 .setQuery(queryBuilder)
                 .get();
         //取查询结果
         SearchHits searchHits = searchResponse.getHits();
         //取查询结果的总记录数
         System.out.println("查询结果总记录数"+searchHits.getTotalHits());
         //查询结果列表
         Iterator<SearchHit> iterator = searchHits.iterator();
         while(iterator.hasNext()){
             SearchHit searchHit = iterator.next();
             System.out.println(searchHit.getSourceAsString());
             //取文档属性
             System.out.println("文档属性------");
             Map<String,Object> document = searchHit.getSource();
             System.out.println(document.get("id"));
             System.out.println(document.get("title"));
             System.out.println(document.get("content"));
         }
         //关闭client
         client.close();

     }
   @Test
    public void testSearchByid() throws Exception {
       //创建client
       //创建一个查询对象
       QueryBuilder queryBuilder = QueryBuilders.idsQuery().addIds("1", "1");
       search(queryBuilder);
    }
    @Test
    public void testQueryByTerm() throws Exception{
        //name,要搜索的字段
        //value要搜素的关键词
        QueryBuilder queryBuilder = QueryBuilders.termQuery("title","标题");
        search(queryBuilder);
    }
    @Test
    public void testQueryStringQuery() throws Exception{
        //name,要搜索的字段
        //value要搜素的关键词
        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("内容");
        search(queryBuilder);
    }

分页:
1在queryBulider对象中执行查询之前,设置分页信息
2然后执行查询
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)
分页需要设置两个值,From,Size
From:起始的行号,从0开始
size:每页显示的记录数

private void search(QueryBuilder queryBuilder) throws Exception{
//执行查询
Settings setting = Settings.builder()
.put(“cluster.name”,“elasticsearch”).build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”),9300));
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)

.get();
//取查询结果
SearchHits searchHits = searchResponse.getHits();
//取查询结果的总记录数
System.out.println(“查询结果总记录数”+searchHits.getTotalHits());
//查询结果列表
Iterator iterator = searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println(searchHit.getSourceAsString());
//取文档属性
System.out.println(“文档属性------”);
Map<String,Object> document = searchHit.getSource();
System.out.println(document.get(“id”));
System.out.println(document.get(“title”));
System.out.println(document.get(“content”));
}
//关闭client
client.close();

}

@Test
    public void testAddDucumeng3()throws Exception {
        for (int i = 0; i < 10; i++) {
            //创建一个Article对象
            Article article = new Article();
            //设置对象属性
            article.setId(i);
            article.setTitle("哈哈哈哈哈有有有由于啾啾久反反复复烦烦烦"+i);
            article.setContent("酷酷酷酷酷酷顶顶顶顶顶顶顶呃呃呃呃嗷嗷嗷啊"+i);
            //把article对象转换成json格式的字符串
            ObjectMapper objectMapper = new ObjectMapper();
            String json = objectMapper.writeValueAsString(article);
            //使用client把文档写入索引库
            //关闭client
            Settings setting = Settings.builder()
                    .put("cluster.name", "elasticsearch").build();
            //创建客户端对象
            TransportClient client = new PreBuiltTransportClient(setting)
                    .addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
            client.prepareIndex("articleindex", "article", i+"")
                    .setSource(json, XContentType.JSON)
                    .get();
            client.close();
        }
    }
 @Test
    public void testQueryStringQuery() throws Exception{
        //name,要搜索的字段
        //value要搜素的关键词
        QueryBuilder queryBuilder = QueryBuilders.queryStringQuery("烦烦烦")
                .defaultField("title");

        search(queryBuilder);
    }

5.查询结果高亮显示
一 ,高亮的配置
1,设置高亮显示的字段
2,设置高亮显示的前缀
3,设置高亮显示的后缀
二,在client对象执行查询之前,设置高亮显示信息
三,循环遍历列表时可以结果中取高亮显示结果

public void search(QueryBuilder queryBuilder,String highlightField) throws Exception{
HighlightBuilder highlightBuilder = new HighlightBuilder();
//高亮显示的字段
highlightBuilder.field(highlightField);
highlightBuilder.preTags("");
highlightBuilder.postTags("
");

//执行查询
Settings setting = Settings.builder()
.put(“cluster.name”,“elasticsearch”).build();
//创建客户端对象
TransportClient client = new PreBuiltTransportClient(setting)
.addTransportAddresses(new InetSocketTransportAddress(InetAddress.getByName(“127.0.0.1”),9300));
SearchResponse searchResponse = client.prepareSearch(“articleindex”)
.setTypes(“article”)
.setQuery(queryBuilder)
//设置分页信息
.setFrom(0)
.setSize(5)
.highlighter(highlightBuilder)
.get();
//取查询结果
SearchHits searchHits = searchResponse.getHits();
//取查询结果的总记录数
System.out.println(“查询结果总记录数”+searchHits.getTotalHits());
//查询结果列表
Iterator iterator = searchHits.iterator();
while(iterator.hasNext()){
SearchHit searchHit = iterator.next();
System.out.println(searchHit.getSourceAsString());
//取文档属性
System.out.println(“文档属性------”);
Map<String,Object> document = searchHit.getSource();
System.out.println(document.get(“id”));
System.out.println(document.get(“title”));
System.out.println(document.get(“content”));
System.out.println("*************");
//高亮结果
Map<String, HighlightField> highlightFields = searchHit.getHighlightFields();
System.out.println(highlightFields);
HighlightField field = highlightFields.get(highlightField);
Text[] fragments = field.getFragments();
if(fragments!=null){
String title = fragments[0].toString();
System.out.println(title);
}
}

//关闭client
client.close();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值