es高亮搜索java_elasticsearch JAVA客户端操作---搜索的过滤、分组高亮

本文介绍了使用Elasticsearch Java客户端进行搜索、分组、过滤和高亮显示的操作。通过示例展示了如何进行基本搜索、分组查询、布尔查询、过滤查询以及高亮显示特定字段,提供了详细的代码实现。
摘要由CSDN通过智能技术生成

elasticsearch        提供的API比较多,看名字差不多可以明白什么意思

public void search01() {

QueryBuilder query = QueryBuilders.queryString("9");

// 设置搜索的内容和现实的大小

SearchResponse res = client.prepareSearch("test").setQuery(query)

.setFrom(0).setSize(60).execute().actionGet();

SearchHits shs = res.getHits();

System.out.println("总共有数据:" + shs.getHits().length);

for (SearchHit it : shs) {

System.out.println(it.getSource());

}

}

// 分组fact类似于sql的group

public void search02() {

// 定义一个分组并为其命名

TermsFacetBuilder facetBuilder = FacetBuilders.termsFacet("groupBysex");

// 按照哪个字段进行分组

facetBuilder.field("sex").size(1);

// 过滤器匹配所有文件

facetBuilder.facetFilter(FilterBuilders.matchAllFilter());

SearchResponse res = client.prepareSearch("test2").setTypes("test02")

.addFacet(facetBuilder).execute().actionGet();

// 获取搜索结果中的分组

Facets facet = res.getFacets();

// 多个分组是以map的形式存储

TermsFacet fac = (TermsFacet) facet.getFacets().get("groupBysex");

for (TermsFacet.Entry tf : fac.entries()) {

System.out.println(tf.getCount() + "======" + tf.getTerm());

}

}

// QUERY

public void search03() {

// 按照字段进行索引,只要内容含有即可不用全部符合

QueryBuilder queryBuilder = QueryBuilders.fieldQuery("name",

"李四1后面有内容也可以");

//整个 数据内容中只要 有 这个字即可

QueryBuilder qb =QueryBuilders.queryString("四");

//组合查询 name为 张三,sex为boy的记录 must表示必须有,mustNot表示不包含,should表示可以存在

QueryBuilder queryBuilder2 = QueryBuilders.fieldQuery("name",

"张三");

QueryBuilder queryBuilder3 = QueryBuilders.fieldQuery("sex",

"boy");

QueryBuilder qbmust = QueryBuilders.boolQuery().must(queryBuilder2).should(queryBuilder3);

//过滤查询

QueryBuilder qb3 = QueryBuilders.filteredQuery(

queryBuilder2,

FilterBuilders.prefixFilter("sex", "bo")

);

SearchResponse res = client.prepareSearch("test").setTypes("test01")

.setSearchType(SearchType.DEFAULT)

.setQuery(qb3).execute().actionGet();

SearchHits shs = res.getHits();

System.out.println("共查到数据:" + shs.getHits().length);

for (SearchHit it : shs) {

System.out.println(it.getSource());

}

}

// 高亮显示

public void search04() {

//前缀过滤器 汉字不好用

FilterBuilder fb = FilterBuilders.prefixFilter("sex", "bo");

//范围过滤

FilterBuilder fb2 = FilterBuilders.rangeFilter("id").from(1).to(10);

//组合过滤

FilterBuilder fb3 = FilterBuilders.andFilter(

FilterBuilders.rangeFilter("id").from(1).to(10),

FilterBuilders.prefixFilter("sex", "bo")

).cache(true);//默认false

SearchResponse res = client.prepareSearch("test").setTypes("test01")

.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)

.setFilter(fb3)

.execute().actionGet();

SearchHits shs = res.hits();

System.out.println("总共有数据:" + shs.getHits().length);

for (SearchHit it : shs) {

System.out.println(it.getSource());

}

}

// 高亮显示

public void search05() {

QueryBuilder qb1 = QueryBuilders.termQuery("name", "张三_4");

// FilterBuilder filter =FilterBuilders.prefixFilter("name", "张三");

SearchResponse res = client.prepareSearch("test4").setTypes("test04")

.setSearchType(SearchType.DFS_QUERY_THEN_FETCH)

.setQuery(QueryBuilders.fieldQuery("id", "1"))

.addHighlightedField("id").setHighlighterPreTags("")

.setHighlighterPostTags("").execute().actionGet();

SearchHits shs = res.hits();

System.out.println("总共有数据:" + shs.getHits().length);

for (SearchHit it : shs) {

System.out.println(it.getSource());

// 获取对应的高亮域

Map result = it.highlightFields();

// 从设定的高亮域中取得指定域

HighlightField titleField = result.get("id");

// 取得定义的高亮标签

String[] titleTexts = titleField.fragments();

// 为title串值增加自定义的高亮标签

String title = "";

for (String text : titleTexts) {

title += text;

}

// 将追加了高亮标签的串值重新填充到对应的对象

// product.setTitle(title);

// 打印高亮标签追加完成后的实体对象

System.out.println(title);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值