yujian
2020-01-18 f4a0f2acc63d7785eab108419a4e16f5f688cb95
fanli/src/main/java/com/yeshi/fanli/dao/elastic/ESOrderDao.java
@@ -3,15 +3,14 @@
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.Fuzziness;
import org.elasticsearch.common.unit.TimeValue;
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;
@@ -33,31 +32,37 @@
    */
   public List<ESOrder> query(String key, String uid, List<Integer> listPlatform) {
      List<ESOrder> list = new ArrayList<ESOrder>();
      // 商品名称匹配
      BoolQueryBuilder should1 = QueryBuilders.boolQuery().should(QueryBuilders.matchPhraseQuery("orderNo", key))
            .should(QueryBuilders.matchPhraseQuery("goodsName", key));
      // 商品名称模糊全词匹配
      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));
      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) {
         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 = client.search(searchRequest, RequestOptions.DEFAULT);
         SearchResponse searchResponse = elasticManger.getClient().search(searchRequest, RequestOptions.DEFAULT);
         SearchHits hits = searchResponse.getHits();
         SearchHit[] searchHits = hits.getHits();
         Gson gson = new Gson();