如何经营一个购物网站,无锡网站建设专注千客云网络,国外视频设计网站,网站架设方式在用es做搜索时通常会遇到很多条件过滤查询#xff0c;以及一些复杂的请求参数过滤。
简单以一组数据类型举例。请求参数为: {关键字:关键字#xff0c;品牌#xff1a;品牌#xff0c;分类#xff1a;分类#xff0c;规格#xff1a;{规格1#xff1a;规格1#xf…在用es做搜索时通常会遇到很多条件过滤查询以及一些复杂的请求参数过滤。
简单以一组数据类型举例。请求参数为: {关键字:关键字品牌品牌分类分类规格{规格1规格1规格2规格2...} }
在query处理时当然用组合查询boolQueryBuild进行组合
处理关键字时关键字可分词
boolQueryBuild.must(QueryBuilders.queryStringQuery(关键字).filed(列名))
处理品牌和分类时品牌和分类不分词
boolQueryBuild.must(QueryBuilders.termQuery(索引列名value))
因为规格参数特殊为list集合
因为规格参数并没有特殊标识所以我们在请求参数端需要做区分将是规格参数的过滤条件在条件前加spec_做区分原本过滤条件为规格1规格1 --》 spec_规格1规格1.
在后端处理时对条件Map遍历
if(searchString.startwith(spec)){ 索引列名 searhmap.规格1.keyword boolQueryBuild.must(QueryBuilders.termQuery(searhmap规格1.subString(6)keywordvalue))
}
关于价格匹配
boolQueryBuild.must(QueryBuilders.rangeQuery(“索引列名”).gt(Integer))
boolQueryBuild.must(QueryBuilders.rangeQuery(“索引列名”).lte(Integer)) 分页
nativeSearchQueryBuilder.withPageable(PageRequest.of(page-1,size));