Java与es8实战之三:es8的Java Client基础应用

  1. 批量新增数据
// 构建一个批量操作BulkOperation的集合
List<BulkOperation> bulkOperations = taskFileList.stream().map(taskFile -> {
    return new BulkOperation.Builder().create(d -> d.document(taskFile).id(UUID.randomUUID().toString()).index(indexName)).build();
}).collect(Collectors.toList());
BulkResponse bulkResponse = elasticsearchClient.bulk(e -> e.index(indexName).operations(bulkOperations));
  1. 根据size查询全部
SearchResponse<EsTaskFile> search = elasticsearchClient.search(s -> s
                .index(indexName).size(100), EsTaskFile.class);
List<EsTaskFile> esTaskFileList = search.hits().hits().stream().map(Hit::source).collect(Collectors.toList());

注意:size的默认值为10

  1. term查询:精确匹配
SearchResponse<EsTaskFile> search = elasticsearchClient.search(s -> s
                        .index(indexName)
                        .query(q -> q
                                .term(t -> t
                                        .field("fileId")
                                        .value(v -> v.longValue(id))
                                )),EsTaskFile.class);
  1. 复杂查询:term、matchPhrase、排序、高亮、分页
Query byTaskId = TermQuery.of(t -> t
                .field("taskId")
                .value(taskId)
        )._toQuery();
        Query byEntityName = MatchPhraseQuery.of(m -> m
                .field("content")
                .query(entityName)
                .slop(0)
        )._toQuery();
        SearchResponse<EsTaskFile> search = elasticsearchClient.search(s -> s
                        .index(indexName)
                        .query(q -> q
                                .bool(b -> b
                                        .must(byTaskId)
                                        .must(byEntityName)
                                )
                        ).sort(builder -> builder
                                .field(fieldBuilder -> fieldBuilder
                                        .field("fileName")
                                        .order(SortOrder.Asc)
                                )
                        ).highlight(builder -> builder
                                .preTags("<font style= \"background: yellow\">")
                                .postTags("</font>")
                                .fields("content", fieldBuilder -> fieldBuilder)
                        ).from((pageNum - 1) * pageSize).size(pageSize),
EsTaskFile.class);
  1. 根据条件批量删除
List<FieldValue> values = taskIdList.stream().map(FieldValue::of).collect(Collectors.toList());
Query byTaskIds = TermsQuery.of(t -> t
        .field("taskId")
        .terms(new TermsQueryField.Builder()
                .value(values).build()
        )
)._toQuery();
DeleteByQueryRequest of = new DeleteByQueryRequest.Builder().index(indexName).query(byTaskIds).build();
DeleteByQueryResponse deleteByQueryResponse = elasticsearchClient.deleteByQuery(of);
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Java API ES8中,可以使用Highlight API来实现高亮搜索。以下是一个简单的例子: ``` SearchRequest searchRequest = new SearchRequest("my_index"); SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); QueryBuilder queryBuilder = QueryBuilders.matchQuery("my_field", "my_search_text"); searchSourceBuilder.query(queryBuilder); HighlightBuilder highlightBuilder = new HighlightBuilder(); highlightBuilder.field("my_field"); searchSourceBuilder.highlighter(highlightBuilder); searchRequest.source(searchSourceBuilder); SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); SearchHits hits = searchResponse.getHits(); for (SearchHit hit : hits.getHits()) { Map<String, HighlightField> highlightFields = hit.getHighlightFields(); HighlightField highlight = highlightFields.get("my_field"); String[] fragments = highlight.fragments(); String fragmentString = StringUtils.join(fragments, "..."); // Do something with the highlighted fragment } ``` 在上面的代码中,我们首先创建了一个SearchRequest对象,并设置了要搜索的索引名称。然后,我们创建了一个SearchSourceBuilder对象,并使用QueryBuilder来指定我们要搜索的文本。接下来,我们创建了一个HighlightBuilder对象,并将要高亮显示的字段名称添加到其中。最后,我们将HighlightBuilder对象添加到SearchSourceBuilder对象中,并执行搜索。 搜索完成后,我们从SearchResponse对象中获取搜索结果,并使用getHighlightFields()方法来获取高亮字段的映射。我们可以使用这个映射来获取每个文档的高亮字段。在上面的例子中,我们只高亮显示了一个字段,因此我们只需要从映射中获取“my_field”键的值。我们使用HighlightField对象的fragments()方法来获取高亮文本的片段,并使用StringUtils.join()方法将它们连接起来。最后,我们可以对高亮文本进行进一步处理,例如将它们显示在搜索结果页面上。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值