关于ElasticSearch处理过滤条件
在用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)+"keyword","value"))
}
關于價格匹配
boolQueryBuild.must(QueryBuilders.rangeQuery(“索引列名”).gt(Integer))
boolQueryBuild.must(QueryBuilders.rangeQuery(“索引列名”).lte(Integer))
?
分頁
nativeSearchQueryBuilder.withPageable(PageRequest.of(page-1,size));
?
總結
以上是生活随笔為你收集整理的关于ElasticSearch处理过滤条件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NAT模式下虚拟机与主机网络关系配置
- 下一篇: 记录docker-Skywalking集