6、elasticsearch-java 的基本操作

本文档提供ES5.6.0中Java API的基本操作介绍,包括索引、类型的检查与删除,文档的创建及高亮显示等功能,并给出具体的实现代码示例。

 记录的是es5.6.0的Java Api,springboot1.5.6

    @Resource
    TransportClient transportClient;
检查索引是否存在
    /**
     *  检查索引是否存在
     * @param indexName 索引名称
     * @return
     */
    public  boolean checkIndexExist( String indexName){
        IndicesExistsRequest inExistsRequest = new IndicesExistsRequest(indexName);

        IndicesExistsResponse inExistsResponse = transportClient.admin().indices()
                .exists(inExistsRequest).actionGet();
        return inExistsResponse.isExists();
    }

    例如在创建索引名为:book之前需要判断book这个索引是否存在。

 

检查类型是否存在
    /**
     * 检查类型是否存在
     * 注意: 这种情况默认时 索引已经存在
     * @param indexName 索引名
     * @param typeName 类型名
     * @return
     */
    public  boolean checkTypeExist(String indexName,String typeName){
        if (!checkIndexExist(indexName)){
            return false;
        }
        TypesExistsRequest inExistsRequest = new TypesExistsRequest(new String[]{indexName},typeName);

        TypesExistsResponse inExistsResponse = transportClient.admin().indices().typesExists(inExistsRequest)
                .actionGet();

        return inExistsResponse.isExists();
    }

 

删除索引
    /**
     * 删除索引
     * @param indexName
     */
    public  void deleteIndex(String indexName){
        if (!checkIndexExist(indexName)) {
            System.out.println(indexName + " not exists");
        } else {

            DeleteIndexResponse dResponse = transportClient.admin().indices().prepareDelete(indexName)
                    .execute().actionGet();
            if (dResponse.isAcknowledged()) {
                System.out.println("delete index "+indexName+"  successfully!");

            }else{
                System.out.println("Fail to delete index "+indexName);

            }
        }

    }

当一个索引被删除,那么索引下的所有类型和下面的文档将都被删除。

创建文档

示例:创建一个索引名books类型名novels的文档。

            //构建文档内容
            XContentBuilder content = null;
            try {
                content = XContentFactory.jsonBuilder().startObject()
                        .field("name", "三体-黑暗森林")
                        .field("author","大刘")
                        .field("date","2017-01-25 14:12:52")
                        .field("id", 1);
                        .field("price",102)
                content.endObject();


                //构建索引
                IndexResponse result = transportClient.prepareIndex("books", "novels")
                        .setSource(content)
                        .get();

            } catch (IOException e) {
                e.printStackTrace();
            }

 

高亮显示
  1. 先需要指定搜索命中的文档的哪些字段需要高亮显示
  2. 封装高亮显示的样式
    /**
     * 启用高亮字段
     * @param builder
     * @param fields 需要高亮显示的文档字段
     */
    public  void enableHighlight(SearchRequestBuilder builder, String ... fields) {
        //设置自定义高亮显示
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        Objects.requireNonNull(fields);
        for (String field : fields) {
            highlightBuilder.field(field);
        }
        highlightBuilder.preTags("<font color=\"red\">");
        highlightBuilder.postTags("</font>");
        builder.highlighter(highlightBuilder);
    }

    /**
     * 封装高亮字段搜索结果
     * @param hit
     * @param fields 需要高亮显示的文档字段
     */
    public  void setHighlightResult(SearchHit hit, String ... fields){

        Objects.requireNonNull(fields);
        Map<String, HighlightField> highlightFields = hit.getHighlightFields();
        if (Objects.nonNull(highlightFields)){
            for (String field : fields) {
                HighlightField highlight = highlightFields.get(field);
                if (Objects.nonNull(highlight)){
                    Text[] fragments = highlight.fragments();

                    StringBuilder hitStr= new StringBuilder();
                    for (Text fragment : fragments) {
                        hitStr.append(fragment);
                    }
                    hit.getSource().put(field, hitStr.toString());
                }

            }
        }

    }

使用:

103816_5fJx_1993676.png

 

搜索

 

持续更新……

 

 

 

转载于:https://my.oschina.net/u/1993676/blog/1551714

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值