一个elasticsearch查询demo

索引

{
    "mappings" : {
      "_source" : {
        "includes" : [
          "name",
          "shortname",
          "score",
          "status",
          "state",
          "classify",
          "province",
          "city",
          "frName",
          "entType",
          "entStatus",
          "regNo",
          "regCap",
          "regOrg",
          "authorityCode",
          "esDate",
          "tagArr"
        ]
      },
      "properties" : {
        "authorityCode" : {
          "type" : "keyword",
          "store" : true
        },
        "city" : {
          "type" : "keyword",
          "store" : true
        },
        "classify" : {
          "type" : "keyword",
          "store" : true
        },
        "entStatus" : {
          "type" : "keyword",
          "store" : true
        },
        "entType" : {
          "type" : "keyword",
          "store" : true
        },
        "esDate" : {
          "type" : "long",
          "store" : true
        },
        "frName" : {
          "type" : "keyword",
          "store" : true
        },
        "lastmodifiedtime" : {
          "type" : "date"
        },
        "name" : {
          "type" : "text",
          "analyzer" : "ik_pinyin_analyzer"
        },
        "province" : {
          "type" : "keyword",
          "store" : true
        },
        "regCap" : {
          "type" : "keyword",
          "store" : true
        },
        "regNo" : {
          "type" : "keyword",
          "store" : true
        },
        "regOrg" : {
          "type" : "keyword",
          "store" : true
        },
        "score" : {
          "type" : "integer",
          "store" : true
        },
        "shortname" : {
          "type" : "text",
          "analyzer" : "ik_pinyin_analyzer"
        },
        "state" : {
          "type" : "keyword",
          "store" : true
        },
        "status" : {
          "type" : "integer",
          "store" : true
        },
        "tagArr" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        }
      }
    },
    "settings" : {
      "index" : {
        "routing" : {
          "allocation" : {
            "include" : {
              "_tier_preference" : "data_content"
            }
          }
        },
        "number_of_shards" : "3",
        "max_result_window" : "10000000",
        "analysis" : {
          "filter" : {
            "my_pinyin" : {
              "lowercase" : "true",
              "keep_original" : "true",
              "remove_duplicated_term" : "true",
              "keep_separate_first_letter" : "false",
              "type" : "pinyin",
              "limit_first_letter_length" : "16",
              "keep_full_pinyin" : "true"
            }
          },
          "analyzer" : {
            "ik_pinyin_analyzer" : {
              "filter" : [
                "my_pinyin"
              ],
              "type" : "custom",
              "tokenizer" : "ik_max_word"
            }
          }
        },
        "number_of_replicas" : "0"
      }
    }
}

查询demo

public class EsTest {

    @Autowired
    private RestHighLevelClient restClient;

    public void esTest(Parm parm) throws IOException {

        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        //搜索的条件
        if (parm.getCondition() != null && !"".equals(parm.getCondition())) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("name", parm.getCondition()).minimumShouldMatch("100%"));
        }
        if (parm.getProvince() != null && !"".equals(parm.getProvince())) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("province", parm.getProvince()));
        }
        if (parm.getCity() != null && !"".equals(parm.getCity())) {
            boolQueryBuilder.must(QueryBuilders.matchQuery("city", parm.getCity()));
        }
        //classify 字段在classify列表中
        if (parm.getIndustryCategoriesList() != null && parm.getIndustryCategoriesList().size() > 0) {
            boolQueryBuilder.must(QueryBuilders.termsQuery("classify", parm.getIndustryCategoriesList()));
        }
        //存在某个字段
        boolQueryBuilder.must(QueryBuilders.existsQuery("tagArr"));
        //大于等于  小于等于
        boolQueryBuilder.must(QueryBuilders.rangeQuery("score").gte(parm.getScoreBegin()).lte(parm.getScoreEnd()));
        searchSourceBuilder.query(boolQueryBuilder);
        //分页
        searchSourceBuilder.from((parm.getPageNo() - 1) * parm.getPageSize());
        searchSourceBuilder.size(parm.getPageSize());
        //设置高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        /*highlightBuilder.fields().add(new HighlightBuilder.Field("name"));*/
        highlightBuilder.field("name").field("classify").preTags("<em>").postTags("</em>").requireFieldMatch(false);
        //最大高亮分片数
        highlightBuilder.fragmentSize(800000);
        //从第一个分片获取高亮片段
        highlightBuilder.numOfFragments(0);
        searchSourceBuilder.highlighter(highlightBuilder);

        HashMap resultEs = new HashMap();
//        SearchRequest searchRequest = new SearchRequest(ES_INDEX).types(ES_TYPE);
        SearchRequest searchRequest = new SearchRequest("index");
        searchRequest.source(searchSourceBuilder);
        SearchResponse searchResponse = restClient.search(searchRequest, RequestOptions.DEFAULT);
        SearchHits hits = searchResponse.getHits();
        //获得匹配总记录
        long totalHits = hits.getTotalHits().value;
        // 如果总数为0  就是没查到数据在es里面 就直接返回
        if (totalHits == 0) {
        }
        SearchHit[] searchHits = hits.getHits();
        //处理数据
        for (SearchHit hit : searchHits) {
            String id = hit.getId();
        }
        resultEs.put("totalCounts", totalHits);
        resultEs.put("totalPage", totalHits % parm.getPageSize() > 0 ? totalHits / parm.getPageSize() + 1 : totalHits / parm.getPageSize());
        resultEs.put("pageNo", parm.getPageNo());
        resultEs.put("pageSize", parm.getPageSize());

    }
}

@Data
class Parm{
    public String condition;
    public String province;
    public String city;
    public List<String> industryCategoriesList;
    public Integer scoreBegin;
    public Integer scoreEnd;
    private int pageNo;
    private int pageSize = 10;
}
{"from":0,"size":10,"query":{"bool":{"must":[{"match":{"name":{"query":"xxxxxx ","analyzer": "ik_max_word","operator":"or","prefix_length":0,"max_expansions":50,"minimum_should_match":"100%","fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}},{"match":{"province":{"query":"浙江","operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}},{"match":{"city":{"query":"温州市","operator":"OR","prefix_length":0,"max_expansions":50,"fuzzy_transpositions":true,"lenient":false,"zero_terms_query":"NONE","auto_generate_synonyms_phrase_query":true,"boost":1.0}}},{"range":{"score":{"from":0,"to":100,"include_lower":true,"include_upper":true,"boost":1.0}}}],"adjust_pure_negative":true,"boost":1.0}},"highlight":{"pre_tags":["<em>"],"post_tags":["</em>"],"fragment_size":800000,"number_of_fragments":0,"require_field_match":false,"fields":{"name":{},"classify":{}}}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单的 Java demo,使用 Elasticsearch 进行搜索: ```java import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.apache.http.HttpHost; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchResponse; import org.elasticsearch.client.RequestOptions; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.elasticsearch.common.unit.TimeValue; import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.search.SearchHit; import org.elasticsearch.search.builder.SearchSourceBuilder; public class ElasticsearchDemo { public static void main(String[] args) throws IOException { // 连接 Elasticsearch RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("localhost", 9200, "http"))); // 构造查询条件 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); sourceBuilder.query(QueryBuilders.matchQuery("content", "Java")); sourceBuilder.timeout(new TimeValue(60, TimeValue.MINUTES)); // 构造查询请求 SearchRequest searchRequest = new SearchRequest("index_name"); searchRequest.source(sourceBuilder); // 执行查询 SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT); // 处理查询结果 SearchHit[] hits = searchResponse.getHits().getHits(); for (SearchHit hit : hits) { Map<String, Object> sourceAsMap = hit.getSourceAsMap(); System.out.println(sourceAsMap); } // 关闭 Elasticsearch 连接 client.close(); } } ``` 其中,`HttpHost` 表示 Elasticsearch 的地址和端口,`SearchSourceBuilder` 构造查询条件,`SearchRequest` 构造查询请求,`RestHighLevelClient` 执行查询,`SearchResponse` 表示查询结果,`SearchHit` 表示每个匹配的文档,可以通过 `getSourceAsMap()` 方法获取文档内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值