package sim.es.learn.test.search;
import java.util.Map;
import javax.xml.soap.Text;
import org.apache.lucene.index.Term;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.client.Client;
import org.elasticsearch.index.query.FilterBuilder;
import org.elasticsearch.index.query.FilterBuilders;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.facet.FacetBuilders;
import org.elasticsearch.search.facet.Facets;
import org.elasticsearch.search.facet.terms.TermsFacet;
import org.elasticsearch.search.facet.terms.TermsFacetBuilder;
import org.elasticsearch.search.highlight.HighlightField;
public class TestSearch {
private Client client;
public TestSearch(Client client) {
this.client = client;
}
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("<spand>")
.setHighlighterPostTags("</bod>").execute().actionGet();
SearchHits shs = res.hits();
System.out.println("总共有数据:" + shs.getHits().length);
for (SearchHit it : shs) {
System.out.println(it.getSource());
// 获取对应的高亮域
Map<String, HighlightField> 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);
}
}
}
elasticsearch java操作的api实例
4星 · 超过85%的资源 需积分: 50 6 浏览量
2015-04-20
22:33:24
上传
评论 7
收藏 14.56MB ZIP 举报
colie_li
- 粉丝: 368
- 资源: 22
最新资源
- 2023-04-06-项目笔记 - 第一百二十一阶段 - 4.4.2.119全局变量的作用域-119 -2024.05.02
- 1714660793877491.000000.jpg
- delphi scan 华为扫码
- 继续分享收藏大神开发的日历窗体
- delphi 的app蓝牙打印
- 一个简单的表格VBA日历窗体
- 310ssm-mysql-jsp 编程类在线答题系统.zip(可运行源码+数据库文件+文档)
- 基于深度学习CNN网络+pytorch框架实现遥感图像滑坡识别源码+数据集+训练好的模型.zip
- 12个CH395Q代码例程
- 毕业设计 基于django+mysql+bootstrap3实现教师教学质量评价系统源码+sql.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
- 1
- 2
- 3
- 4
- 5
前往页