es 模糊查询默认

一个param字段如何支持多值模糊查询, 最好能把结果代码给我贴出来


下面的代码是这样的 类似是这样的 select * from table where param like '%www%' or email like '%email%'

我想把改为 select * from table where param like '%www%' or param like '%email%' 这样的语句,该如何修改

这个是目前的代码  他只是一对一 key 值进行搜索
 public NativeSearchQuery getNativeSearchQuery (ProcessLog condition,PageParam pageParam){
        Sort sortBy = Sort.by(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, pageParam.getSortCondition())).descending();

        if (StringUtils.equalsIgnoreCase("asc", pageParam.getSortModel())) {
            sortBy = sortBy.ascending();
        }
        Pageable pageable = PageRequest.of(pageParam.getPageNum() - 1, pageParam.getPageSize(), sortBy);

        if (StringUtils.isEmpty(pageParam.getSortCondition())) {
            pageParam.setSortCondition("requestTime");
        }


        BoolQueryBuilder boolQueryBuilder = boolQuery();

        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder().withPageable(pageable)
                .withQuery(boolQueryBuilder);

        if(StringUtils.isNotEmpty(condition.getUser())){
            boolQueryBuilder.must(matchPhraseQuery("user", condition.getUser()));
        }

        if(StringUtils.isNotEmpty(condition.getRequestUri())){
            boolQueryBuilder.must(matchPhraseQuery("requestUri", condition.getRequestUri()));
        }

        if(StringUtils.isNotEmpty(condition.getParams())){
            boolQueryBuilder.must(matchPhraseQuery("params", condition.getParams()));
            boolQueryBuilder.must(boolQueryBuilder.should(multiMatchQuery("params", condition.getParams())))
        }

//        if(StringUtils.isNotEmpty(condition.getEmail())){
//            boolQueryBuilder.must(matchPhraseQuery("email", condition.getEmail()));
//        }
//


        if(StringUtils.isNotEmpty(condition.getPeerId())){
            boolQueryBuilder.must(matchPhraseQuery("peerId", condition.getPeerId()));
        }

        if(StringUtils.isNotEmpty(condition.getServerName())){
            boolQueryBuilder.must(termQuery("serverName.keyword", condition.getServerName()));
        }

        if(condition.getStatus() != null){
            boolQueryBuilder.must(termQuery("status", condition.getStatus()));
        }

        if(StringUtils.isNotEmpty(condition.getMethod())){
            boolQueryBuilder.must(matchPhraseQuery("method", condition.getMethod()));
        }

        if(condition.getStartTime() != null && condition.getEndTime() != null ){
            boolQueryBuilder.must(
                    rangeQuery("requestTime")
                            .gte(condition.getStartTime())
                            .lt(condition.getEndTime())
            );
        }

        return nativeSearchQueryBuilder.build();
    }

boolQueryBuilder.must(termsQuery("params", condition.getParams(),condition.getEmail()));  这种方式不行
boolQueryBuilder.must(multiMatchQuery("params", condition.getParams(),condition.getEmail())); 这种也不行
boolQueryBuilder.must(wildcardQuery("params", condition.getParams())); 这种方式 连单值都不搜索为空啦
boolQueryBuilder.must(wildcardQuery("params", ("*"+condition.getParams()+"*"))); 这样也不行
这是java代码 我之前一对一查询java代码得到的es语句
{
  "bool" : {
    "must" : [
      {
        "match_phrase" : {
          "requestUri" : {
            "query" : "signIn",
            "slop" : 0,
            "zero_terms_query" : "NONE",
            "boost" : 1.0
          }
        }
      },
      {
        "match_phrase" : {
          "params" : {
            "query" : "TVU Search",
            "slop" : 0,
            "zero_terms_query" : "NONE",
            "boost" : 1.0
          }
        }
      },
      {
        "match_phrase" : {
          "email" : {
            "query" : "3333",
            "slop" : 0,
            "zero_terms_query" : "NONE",
            "boost" : 1.0
          }
        }
      },
      {
        "range" : {
          "requestTime" : {
            "from" : 1596240000000,
            "to" : 1598659200000,
            "include_lower" : true,
            "include_upper" : false,
            "boost" : 1.0
          }
        }
      }
    ],
    "adjust_pure_negative" : true,
    "boost" : 1.0
  }
}

WildcardQueryBuilder queryBuilder1 = QueryBuilders.wildcardQuery("name", "*jack*");

//搜索名字中含有jack的文档

WildcardQueryBuilder queryBuilder2 = QueryBuilders.wildcardQuery("name", "*tom*");

//搜索名字中含有tom的文档

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();

//name中含有jack或者interest含有read,相当于or

boolQueryBuilder.should(queryBuilder1);

boolQueryBuilder.should(queryBuilder2);

你试试这种写法

不行,我试过

试过,是报错。还是没效果?

这个写法就和上面的一样,其中一个值就搜索不出来啦,更不要说两个值啦

这个难道不能跑吗?select * from table where param like '%www%' or param like '%email%' 我看这个SQL没毛病啊


这个是sql 我想要类似es的语句的