| | |
| | | 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.common.unit.Fuzziness;
|
| | | import org.elasticsearch.index.query.BoolQueryBuilder;
|
| | | import org.elasticsearch.index.query.MatchQueryBuilder;
|
| | | import org.elasticsearch.index.query.QueryBuilders;
|
| | | import org.elasticsearch.index.query.TermQueryBuilder;
|
| | | 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> queryMatch(String key, String uid) {
|
| | | List<ESOrder> list = new ArrayList<ESOrder>();
|
| | |
|
| | | // 商品名称匹配
|
| | | MatchQueryBuilder match1 = new MatchQueryBuilder("goodsName", key).fuzziness(Fuzziness.AUTO);
|
| | | // 订单号匹配
|
| | | MatchQueryBuilder match2 = new MatchQueryBuilder("orderNo", key).fuzziness(Fuzziness.AUTO);
|
| | |
|
| | | TermQueryBuilder term1 = QueryBuilders.termQuery("uid", uid);
|
| | | // 上级
|
| | | TermQueryBuilder term2 = QueryBuilders.termQuery("uidDirect", uid);
|
| | | // 上上级
|
| | | TermQueryBuilder term3 = QueryBuilders.termQuery("uidIndirect", uid);
|
| | |
|
| | | SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
|
| | | sourceBuilder.query(match1).query(match2).query(term1).query(term2).query(term3);
|
| | |
|
| | | SearchRequest searchRequest = new SearchRequest();
|
| | | searchRequest.indices(index);
|
| | | searchRequest.source(sourceBuilder);
|
| | | try {
|
| | | SearchResponse searchResponse = client.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;
|
| | | }
|
| | |
|
| | | /**
|
| | | * 查询匹配
|
| | | * |
| | | * @param key 搜索词
|
| | | * @param uid 用户id
|
| | | * @return
|
| | | */
|
| | | public List<ESOrder> query(String key, String uid) {
|
| | | List<ESOrder> list = new ArrayList<ESOrder>();
|
| | | // 商品名称匹配
|
| | | BoolQueryBuilder should1 = QueryBuilders.boolQuery().should(QueryBuilders.matchPhraseQuery("orderNo", key))
|
| | | .should(QueryBuilders.matchPhraseQuery("goodsName", 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();
|
| | | sourceBuilder.query(QueryBuilders.boolQuery().must(should1).must(should2));
|
| | | |
| | | SearchRequest searchRequest = new SearchRequest();
|
| | | searchRequest.indices(index);
|
| | | searchRequest.source(sourceBuilder);
|
| | | try {
|
| | | SearchResponse searchResponse = client.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;
|
| | | }
|
| | |
|
| | | }
|
| | | package com.yeshi.fanli.dao.elastic; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | import org.elasticsearch.action.search.SearchRequest; |
| | | import org.elasticsearch.action.search.SearchResponse; |
| | | import org.elasticsearch.client.RequestOptions; |
| | | import org.elasticsearch.common.unit.TimeValue; |
| | | 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)); |
| | | } |
| | | // 最大查询数为200 |
| | | sourceBuilder.size(200); |
| | | // 超时20s |
| | | sourceBuilder.timeout(new TimeValue(20, TimeUnit.SECONDS)); |
| | | 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; |
| | | } |
| | | |
| | | } |