栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

spring cloud 集成elasticsearch 实现分词查询和模糊查询

spring cloud 集成elasticsearch 实现分词查询和模糊查询

使用elasticsearch 主要的一个场景就是分词查询,我以电商搜索商品为例:搜索“精华乳液套装”

搜索引擎(ik分词器)会拆成 精华、乳液、套装分别去匹配字段,会根据匹配度计算分值

条件组装

            BoolQueryBuilder productNameIKBoolBuilder = QueryBuilders.boolQuery();                                                  
           productNameIKBoolBuilder.must(QueryBuilders.matchQuery("productName.keyword_ik", searchRequestVO.getKeyword()));

            // 设置是否按查询匹配度排序
            searchSourceBuilder.minScore(0.25f);
            searchSourceBuilder.explain(true);
            Integer startPage = 1;
            Integer pageSize = 10;
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.from(startPage).size(pageSize);
            //是否显示全部总数
            searchSourceBuilder.trackTotalHits(true);
            // 设置是否按查询匹配度排序
            searchSourceBuilder.minScore(0.25f);
            searchSourceBuilder.explain(true);
            // Function Score Query
            FunctionScoreQueryBuilder functionScoreQueryBuilder = QueryBuilders.functionScoreQuery(productNameIKBoolBuilder , ScoreFunctionBuilders.weightFactorFunction(1000));
            searchSourceBuilder.query(functionScoreQueryBuilder);
            SearchRequest searchRequest = new SearchRequest(indexEnum.getCode() + getActived());
            searchRequest.source(searchSourceBuilder);
            log.info("执行查询:{}", searchSourceBuilder.toString());
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
            
            long totalHits = searchResponse.getHits().getTotalHits().value;
            long length = searchResponse.getHits().getHits().length;
            log.info("查询到[{}]条数据,处理数据条数[{}]", totalHits, length);

不使用分词查询, elasticsearch也提供模糊查询功能,*表示任意字符

                BoolQueryBuilder boolBuilderGoodsName = QueryBuilders.boolQuery();
                boolBuilderGoodsName.must(QueryBuilders.wildcardQuery("productName", "*"+searchRequestVO.getKeyword()+"*"));

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/711499.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号