package com.zdcf.search;
import java.util.List;
import javax.annotation.Resource;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;
import com.zdcf.search.entity.ChnlThemeSearch;
import com.zdcf.search.param.ThemeSearchParam;
import com.zdcf.search.repository.ChnlThemeRepository;
@Service()
public class ChnlThemeSearchService extends BaseSearchService implements IChnlThemeSearchService {
@Autowired
private ChnlThemeRepository chnlThemeRepository;
// @Resource(name="elasticsearchTemplate") // run一下,好
// private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
private ElasticsearchTemplate elasticsearchTemplate;
//前台用户的搜索 我对这个编译器不怎么熟悉,平时用的idea,这个类在哪,定位一下。。。在哪什么?这个是eclipse啊
public List<ChnlThemeSearch> search(ThemeSearchParam param) {
SearchQuery searchQuery = new NativeSearchQueryBuilder()
.withQuery(createQuery(param))
.withFilter(createFilter(param))
.withSort(addSort(param))
.withPageable(new PageRequest(param.getI() - 1, param.getS()))
.build();
Page<ChnlThemeSearch> page = elasticsearchTemplate.queryForPage(searchQuery, ChnlThemeSearch.class);
param.setTotalNum((int)page.getTotalElements());
return page.getContent();
}
protected QueryBuilder createQuery(ThemeSearchParam param){
// BoolQueryBuilder builder = QueryBuilders.boolQuery();
// boolean title = addTitleQuery(param.getTitle(), builder);
//
// if(title){
// return builder;
// }
return QueryBuilders.matchAllQuery();
}
public void index(ChnlThemeSearch search){
chnlThemeRepository.index(search);
}
public void del(int id){
chnlThemeRepository.delete(id);
}
public void save(ChnlThemeSearch search){
chnlThemeRepository.save(search);
}
protected boolean addThemeQuery(String theme, BoolQueryBuilder builder){
if(StringUtils.isNotBlank(theme)){
builder.must(QueryBuilders.wildcardQuery("theme", "*"+theme+"*"));
return true;
}
return false;
}
private BoolQueryBuilder createFilter(ThemeSearchParam param){
BoolQueryBuilder builder = QueryBuilders.boolQuery();
this.addThemeQuery(param.getTheme(), builder);
//默认查已发布的数据
// addDraftFlagFilter(param.getDraftFlag()==null?Constants.PostStatus.Approved:param.getDraftFlag(), builder);
// addDelFlagFilter(param.getDelFlag()==null?Constants.IS_DELFLAG_TYPE.NORMAL:param.getDelFlag(),builder);
// addApprvlStatusFilter(param.getApprvlStatus()==null?Constants.ApprvlStatus.Approved:param.getApprvlStatus(), builder);
return builder;
}
//查询单个餐饮
// public ChnlFoodSearch searchById(ZhihuSearchParam param) {
// SearchQuery searchQuery = new NativeSearchQueryBuilder()
// .withFilter(createIDFilter(param))
// .withSort(addSort(param))
// .withPageable(new PageRequest(param.getI()-1, param.getS()))
// .build();
//
// Page<ChnlFoodSearch> page = elasticsearchTemplate.queryForPage(searchQuery, ChnlFoodSearch.class);
//
// param.setTotalNum((int)page.getTotalElements());
//
// if(null!=page&&page.getTotalElements()>0){
// return page.getContent().get(0);
// }else{
// return null;
// }
//
// }
}