package com.yeshi.fanli.dao.elastic;
|
|
import java.io.IOException;
|
import java.util.ArrayList;
|
import java.util.List;
|
|
import org.elasticsearch.action.search.SearchRequest;
|
import org.elasticsearch.action.search.SearchResponse;
|
import org.elasticsearch.client.RequestOptions;
|
import org.elasticsearch.index.query.BoolQueryBuilder;
|
import org.elasticsearch.index.query.QueryBuilders;
|
import org.elasticsearch.search.SearchHit;
|
import org.elasticsearch.search.SearchHits;
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
import org.springframework.stereotype.Repository;
|
|
import com.google.gson.Gson;
|
import com.yeshi.fanli.dao.ElasticBaseDao;
|
import com.yeshi.fanli.entity.order.ESOrder;
|
|
@Repository
|
public class ESOrderDao extends ElasticBaseDao<ESOrder> {
|
|
/**
|
* 查询匹配
|
*
|
* @param key 搜索词
|
* @param uid 用户id
|
* @return
|
*/
|
public List<ESOrder> query(String key, String uid, List<Integer> listPlatform) {
|
List<ESOrder> list = new ArrayList<ESOrder>();
|
// 商品名称模糊全词匹配
|
BoolQueryBuilder should1 = QueryBuilders.boolQuery().should(QueryBuilders.wildcardQuery("orderNo.keyword", "*" + key + "*"))
|
.should(QueryBuilders.wildcardQuery("goodsName.keyword", "*" + key + "*"));
|
// 用户id匹配
|
BoolQueryBuilder should2 = QueryBuilders.boolQuery().should(QueryBuilders.termQuery("uid", uid));
|
//.should(QueryBuilders.termQuery("uidDirect", uid)).should(QueryBuilders.termQuery("uidDirect", uid));
|
|
// 查询创建
|
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
|
if (listPlatform == null || listPlatform.size() == 0) {
|
sourceBuilder.query(QueryBuilders.boolQuery().must(should1).must(should2));
|
} else {
|
BoolQueryBuilder should3 = QueryBuilders.boolQuery();
|
for (Integer platform: listPlatform) {
|
should3.should(QueryBuilders.termQuery("platform", platform));
|
}
|
sourceBuilder.query(QueryBuilders.boolQuery().must(should1).must(should2).must(should3));
|
}
|
|
SearchRequest searchRequest = new SearchRequest();
|
searchRequest.indices(getDocument(ESOrder.class));
|
searchRequest.source(sourceBuilder);
|
try {
|
SearchResponse searchResponse = elasticManger.getClient().search(searchRequest, RequestOptions.DEFAULT);
|
SearchHits hits = searchResponse.getHits();
|
SearchHit[] searchHits = hits.getHits();
|
Gson gson = new Gson();
|
for (SearchHit hit : searchHits) {
|
String content = hit.getSourceAsString();
|
list.add(gson.fromJson(content, ESOrder.class));
|
}
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
return list;
|
}
|
|
}
|