一个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的语句的