美文网首页
[12]minimumShouldMatch的使用

[12]minimumShouldMatch的使用

作者: 不怕天黑_0819 | 来源:发表于2020-08-06 15:16 被阅读0次

    本文集主要是总结自己在项目中使用ES 的经验教训,包括各种实战和调优。

    首先代码记录如下:注意termsQuery传入list的最大值为1024.所以通过booleanQuery进行组合。

    另外关于booleanQuery的使用注意:must语句都需要匹配,而所有的must_not语句都不能匹配,但是should语句需要匹配多少个呢?默认情况下,should语句一个都不要求匹配,只有一个特例:如果查询中没有must语句,那么至少要匹配一个should语句。

    但是我们需求是must语句作为时间筛选,should语句也必须要匹配上一个,但是默认含有must语句以后就不要求匹配should语句,所以我们通过minimumShouldMatch来设置最少匹配一个,避免should语句一个都不匹配的错误情况。另外关于minimumShouldMatch的详细使用可以参考文档底部。


    public static Map<String,Object> searchBymethod3(List<String> wemediaIds, int pageNo, int size, String ... str){
    
    Long start = System.currentTimeMillis();
    
    SearchRequestBuilder searchRequestBuilder = client.prepareSearch("subscribe_moparticle").setTypes("moparticle");
    
    QueryBuilder filter = QueryBuilders.rangeQuery("ptime").gt("0000-05-16 00:00:00");
    
    QueryBuilder matchQuery1 = QueryBuilders.termsQuery("topicid",list1 );
    
    QueryBuilder matchQuery2 = QueryBuilders.termsQuery("topicid",list2 );
    
    QueryBuilder matchQuery3 = QueryBuilders.termsQuery("topicid",list3 );
    
    QueryBuilder matchQuery4 = QueryBuilders.matchAllQuery();
    
    QueryBuilder matchQuery5 = QueryBuilders.boolQuery().must(filter).should(matchQuery1).should(matchQuery2).should(matchQuery3).minimumShouldMatch(1);
    
    searchRequestBuilder.setQuery(matchQuery5).setFrom(0).setSize(10).addSort("ptime",SortOrder.DESC);
    
    SearchResponse response = searchRequestBuilder.execute().actionGet();
    
    // 输出结果
    
    SearchHits searchHits = response.getHits();
    
    log.info("共搜到:" + searchHits.getTotalHits() + "条结果!");
    
    for (SearchHit hit : searchHits) {
    
    log.info(hit.getSource().get("ptime")+"---" + hit.getSourceAsString());
    
    }
    
    log.info(System.currentTimeMillis()-start+"ms used");
    
    return null;
    
    }
    

    minimumShouldMatch使用说明:直接看链接就可以。注意使用termQuery时如果是text类型,其实会分词成许多term从句,这样可能会影响匹配结果,所以官网不建议使用termQuery来进行text类型的匹配。应该使用matchQuery来实现。

    http://blog.csdn.net/xiao_jun_0820/article/details/51095521

    相关文章

      网友评论

          本文标题:[12]minimumShouldMatch的使用

          本文链接:https://www.haomeiwen.com/subject/leiirktx.html