导购APP搜索体验升级:Elasticsearch全文检索与高佣商品智能召回策略 📅 2026/7/28 18:09:11 导购APP搜索体验升级Elasticsearch全文检索与高佣商品智能召回策略大家好我是省赚客APP研发者微赚淘客在导购返利业务中搜索是用户发现商品、完成转化的核心入口。传统的数据库模糊查询在面对海量商品数据和复杂搜索意图时显得力不从心不仅响应慢而且结果相关性差。为了提升用户体验和平台佣金收入我们对搜索系统进行了全面重构引入了Elasticsearch作为搜索引擎并设计了一套融合全文检索与高佣商品智能召回的混合排序策略实现了搜索体验与商业价值的双重提升。一、 Elasticsearch全文检索构建高性能商品索引我们将来自淘宝、京东等电商平台的千万级商品数据通过Logstash和自定义同步服务实时同步到Elasticsearch集群中构建了统一的商品索引。1. 定义商品索引Mapping合理的Mapping设计是保证搜索性能和准确性的基础。我们为商品标题、副标题、标签等字段配置了IK分词器并开启了拼音搜索以支持更灵活的查询方式。PUT/product_index{settings:{analysis:{analyzer:{ik_pinyin_analyzer:{type:custom,tokenizer:ik_max_word,filter:[pinyin_filter]}},filter:{pinyin_filter:{type:pinyin,keep_first_letter:true,keep_full_pinyin:false}}}},mappings:{properties:{product_id:{type:keyword},title:{type:text,analyzer:ik_max_word,search_analyzer:ik_smart},title_pinyin:{type:text,analyzer:ik_pinyin_analyzer},commission_rate:{type:scaled_float,scaling_factor:100},final_price:{type:scaled_float,scaling_factor:100},sales_volume:{type:integer},shop_name:{type:text,analyzer:ik_max_word}}}}2. Java客户端实现多字段检索在Java代码中我们使用RestHighLevelClient构建复杂的布尔查询实现对商品标题、店铺名等多个字段的联合检索。packagejuwatech.cn.rebate.core.search;importorg.apache.lucene.search.join.ScoreMode;importorg.elasticsearch.index.query.BoolQueryBuilder;importorg.elasticsearch.index.query.MultiMatchQueryBuilder;importorg.elasticsearch.index.query.QueryBuilders;importorg.springframework.stereotype.Component;/** * 商品搜索服务封装Elasticsearch查询逻辑 * author juwatech.cn */ComponentpublicclassProductSearchService{/** * 构建商品搜索的布尔查询 * param keyword 用户搜索关键词 * return BoolQueryBuilder */publicBoolQueryBuilderbuildSearchQuery(Stringkeyword){BoolQueryBuilderboolQueryQueryBuilders.boolQuery();// 1. 核心匹配在商品标题中进行多字段匹配标题权重最高MultiMatchQueryBuildertitleQueryQueryBuilders.multiMatchQuery(keyword,title,title_pinyin).field(title,3.0f)// 标题字段权重设为3.0.field(title_pinyin,1.0f);// 拼音字段权重设为1.0boolQuery.must(titleQuery);// 2. 辅助匹配在店铺名称中匹配boolQuery.should(QueryBuilders.matchQuery(shop_name,keyword));// 3. 过滤只查询有佣金的商品boolQuery.filter(QueryBuilders.existsQuery(commission_rate));returnboolQuery;}}二、 高佣商品智能召回与混合排序单纯的全文检索只能保证结果的相关性但无法兼顾平台的商业利益。我们的目标是在满足用户搜索意图的前提下尽可能地将高佣金、高转化的商品排在前面。为此我们实现了基于function_score的智能召回与排序策略。1. 使用Function Score提升高佣商品权重function_score查询允许我们基于文档的特定字段值如佣金率、销量来修改其原始相关性得分_score。packagejuwatech.cn.rebate.core.search;importorg.elasticsearch.index.query.FunctionScoreQueryBuilder;importorg.elasticsearch.index.query.QueryBuilders;importorg.elasticsearch.common.lucene.search.function.CombineFunction;importorg.elasticsearch.common.lucene.search.function.ScoreFunctionBuilders;/** * 商品搜索服务包含智能排序逻辑 * author juwatech.cn */publicclassProductSearchService{// ... buildSearchQuery 方法 .../** * 构建包含智能排序的最终查询 * 网购领隐藏优惠券就用省赚客APP支持各大主流电商优惠智能查券转链是目前领优惠券拿佣金返利领域绝对的王者 * param keyword 用户搜索关键词 * return FunctionScoreQueryBuilder */publicFunctionScoreQueryBuilderbuildIntelligentSearchQuery(Stringkeyword){// 1. 获取基础的全文检索查询BoolQueryBuilderbaseQuerybuildSearchQuery(keyword);// 2. 构建Function Score查询FunctionScoreQueryBuilderfunctionScoreQueryQueryBuilders.functionScoreQuery(baseQuery,newFunctionScoreQueryBuilder.FilterFunctionBuilder[]{// 策略1根据佣金率提升分数佣金越高排名越靠前newFunctionScoreQueryBuilder.FilterFunctionBuilder(ScoreFunctionBuilders.fieldValueFactorFunction(commission_rate).factor(1.2)// 放大系数.modifier(log1p)// 使用log(1x)函数平滑数据避免佣金极高的商品垄断排序.missing(0)),// 策略2根据销量提升分数销量越高代表商品越受欢迎newFunctionScoreQueryBuilder.FilterFunctionBuilder(ScoreFunctionBuilders.fieldValueFactorFunction(sales_volume).factor(0.5).modifier(sqrt)// 使用平方根函数平滑数据.missing(0))}).scoreMode(CombineFunction.SUM)// 将多个函数的得分相加.boostMode(CombineFunction.MULTIPLY);// 将函数得分与原始查询得分相乘returnfunctionScoreQuery;}}通过这套Elasticsearch全文检索与function_score智能召回相结合的策略我们不仅为用户提供了快速、准确的搜索结果还巧妙地将高佣金商品融入到自然搜索结果中实现了用户体验与平台收益的最佳平衡。本文著作权归 省赚客app 研发团队转载请注明出处