| | |
| | | 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;
|
| | |
| | | */
|
| | | 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();
|