elasticsearch集成
spring:
elasticsearch:
jest:
uris: http://127.0.0.1:9200/
read-timeout: 30s
connection-timeout: 30s
配置type,index
index: XXX
type: XXX
操作
pom.xml
<jest.version>5.3.2</jest.version>
<elasticsearch.version>5.5.0</elasticsearch.version>
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>${jest.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.elasticsearch/elasticsearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>${elasticsearch.version}</version>
</dependency>
1.根据条件分页查询
@Value("${type}")
private String type;
@Value("${index}")
private String index;
@Autowired
private JestClient jestClient;
public PageInfo<Class> pageList(Class class,int pageNum,int pageSize) {
SearchSourceBuilder searchBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
String keywords = class.getKeyWord();
if(!StringUtils.isEmpty(keywords)){
String[] keys = keywords.split("\\s+");//"\s"匹配任意空白字符
StringBuffer values = new StringBuffer();
for(String str: keys){
values.append("\""+str+"\"|");//|or +and
}
String resultvalue = values.substring(0, values.length()-1);
SimpleQueryStringBuilder simpleQuery = new SimpleQueryStringBuilder(resultvalue);
simpleQuery.field("_all");
simpleQuery.defaultOperator(Operator.OR);
boolQueryBuilder.must(simpleQuery);
}
else {
if (!StringUtils.isEmpty(class.getXx1)) { //如果为数字
//参数格式 1,3,4,2
String[] xx1= class.getXx1().split(",");
boolQueryBuilder.must(QueryBuilders.termsQuery("xx1", xx1));
}
if (!StringUtils.isEmpty(class.getXx2)) { //如果为字符串
String[] xx2= class.getXx2().split(",");
boolQueryBuilder.must(QueryBuilders.termsQuery("xx2.keyword", xx2));
}
if (!StringUtils.isEmpty(class.getXx3)) { //如果为日期
Date utilbegin = sdf.parse(class.getXx3);
boolQueryBuilder.must(QueryBuilders.rangeQuery("xx3").gte(new Date(utilbegin.getTime())));
}
}
searchBuilder.query(boolQueryBuilder);
int fromRow = 0;//表示第一页,从第一行开始
if(pageNum > 1){
fromRow = (pageNum-1)*pageSize;
}
log.info(searchBuilder.toString());
Search search = new Search.Builder(searchBuilder.toString())
.addIndex(index).addType(type)
.setParameter(Parameters.FROM, fromRow)
.setParameter(Parameters.SIZE, pageSize)
.build();
JestResult result = null;
try {
result = jestClient.execute(search);
List<Class> jrdata = result.getSourceAsObjectList(Class.class);
int total=jrdata.size();
if (null!=jrdata && jrdata.size()>0) {
total = result.getJsonObject().get("hits").getAsJsonObject().get("total").getAsInt();//总条数
}
}
PageInfo<Class> pageInfo=new PageInfo<>(jrdata);
pageInfo.setTotal(total);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
Long pages;
if(pageInfo.getTotal()%pageSize==0){
pages=pageInfo.getTotal()/pageSize;
}else{
pages=(pageInfo.getTotal()/pageSize)+1;
}
pageInfo.setPages(pages.intValue());
return pageInfo;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}