热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

solr完成VIP等级排名实例教程[java培训]

1.功能介绍本文将使用solr完成vip等级排名,这里并不是简单的按照vip等级排序。而是在使用solr条件查询(不使用排序)的时候将符合条件并且具有vip等级的数据显示在前面,这

1.功能介绍本

文将使用solr完成vip等级排名,这里并不是简单的按照vip等级排序。而是在使用solr条件查询(不使用排序)的时候将符合条件并且具有vip等级的数据显示在前面,这个时候咱们就要使用solr底层提供的自定义评分机制来完成。推荐了解java培训课程。

2.环境介绍

开发环境:IDEA + SpringBoot

solr环境:solr4.10 + tomcat7

备注:solr环境+tomcat环境+IK中文分词配置自行安装

3.准备工作

(1) solr环境安装+tomcat环境+IK分词配置(自行完成) 检查solr环境:浏览器地址栏输入ttp:localhost:8080/solr出现如下页面即可:

solr-vip竞价排名01

检查IK中文分词器,有如下中文分词效果即可。

solr-vip竞价排名02

(2) 在solr的collection目录下的schema.xml中添加如下业务域。一下业务域中包含:商品标题、商品介绍、商品价格、商品创建时间、商品点击次数、商品所属商家vip等级、商品评价。

t_searchText

4.工程搭建

(1) 使用IDEA搭建maven工程

(2) 在pom.xml中加入以下jar依赖

    org.springframework.boot

    spring-boot-starter-parent

    1.5.10.RELEASE

   

    org.springframework.boot

    spring-boot-starter-web

    org.springframework.boot

    spring-boot-starter-test

    org.springframework.data

    spring-data-solr

(3) 编写springBoot启动类SpringbootSolr5Application.java

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication

public class SpringbootSolr5Application {

    public static void main(String[] args) {

        SpringApplication.run(SpringbootSolr5Application.class, args);

    }

}

(4) 在resources目录下创建application.properties加入一下内容:

spring.data.solr.host=http://localhost:8080/solr/

(5) 编写CustomSortTest.java初始化查询数据:

@RunWith(SpringRunner.class)

@SpringBootTest

public class CustomSortTest {

    @Autowired

    private SolrClient client;

    /**

    * 初始化solr索引数据

    * */

    @Test

    public void initSolrData() throws Exception{

        List docs = new ArrayList();

        for(int i=0;i<100;i++){

            SolrInputDocument document = new SolrInputDocument();

            //文档id

            document.setField("id",i);

            //商品标题

            document.setField("t_title","new"+i+"- 三星 W"+i*100+" 黑色 电信3G手机 双卡双待双通");

            //商品介绍

            document.setField("t_intr","下单送12000毫安移动电源!双3.5英寸魔焕炫屏,以非凡视野纵观天下时局,尊崇翻盖设计,张弛中,尽显从容气度!");

            //价格

            document.setField("t_price","8000");

            //创建日期

            document.setField("t_createTime",new Date());

            //点击率

            document.setField("t_point",i%9+9);

            //评价分数

            document.setField("t_assess",i%11+5);

            //vip等级[1-5]

            document.setField("t_vip",i%5);

            docs.add(document);

        }

    client.add(docs);

    client.commit();

    }

}

(6) 编写一下方法看一下默认条件查询:三星的效果:

@Test

public void defualtQuerySort() throws Exception{

    SolrQuery solrQuery = new SolrQuery();

    //关键词

    solrQuery.set("q","t_searchText:*三星*");

    //分页,0开始,每页10条,setStart设置的就是显示第几页

    solrQuery.setStart(0);

    solrQuery.setRows(10);

    //执行查询

    QueryResponse respOnse= client.query(solrQuery);

    //文档结果集

    SolrDocumentList results = response.getResults();

    System.out.println("查询到的总条数:"+ results.getNumFound());

    //遍历查询的结果

    for (SolrDocument solrDocument : results) {

        String id = solrDocument.get("id").toString();

        String title = solrDocument.get("t_title").toString();

        String assess = solrDocument.get("t_assess").toString();

        double point = Double.valueOf(solrDocument.get("t_point").toString());

        double vip = Double.valueOf(solrDocument.get("t_vip").toString());

        System.out.println("id:"+id+" 标题:"+title+" 评价:"+assess+ "点击率:"+point+" vip等

级:"+vip+" " );

    }

}

结果如下:

查询到的总条数:100

id:0 标题:new0- 三星 W0 黑色 电信3G手机 双卡双待双通 评价:5点击率:9.0 vip等级:0.0

id:1 标题:new1- 三星 W100 黑色 电信3G手机 双卡双待双通 评价:6点击率:10.0 vip等级:1.0

id:2 标题:new2- 三星 W200 黑色 电信3G手机 双卡双待双通 评价:7点击率:11.0 vip等级:2.0

id:3 标题:new3- 三星 W300 黑色 电信3G手机 双卡双待双通 评价:8点击率:12.0 vip等级:3.0

id:4 标题:new4- 三星 W400 黑色 电信3G手机 双卡双待双通 评价:9点击率:13.0 vip等级:4.0

id:5 标题:new5- 三星 W500 黑色 电信3G手机 双卡双待双通 评价:10点击率:14.0 vip等级:0.0

id:6 标题:new6- 三星 W600 黑色 电信3G手机 双卡双待双通 评价:11点击率:15.0 vip等级:1.0

id:7 标题:new7- 三星 W700 黑色 电信3G手机 双卡双待双通 评价:12点击率:16.0 vip等级:2.0

id:8 标题:new8- 三星 W800 黑色 电信3G手机 双卡双待双通 评价:13点击率:17.0 vip等级:3.0

id:9 标题:new9- 三星 W900 黑色 电信3G手机 双卡双待双通 评价:14点击率:9.0 vip等级:4.0

id:10 标题:new10- 三星 W1000 黑色 电信3G手机 双卡双待双通 评价:15点击率:10.0 vip等级:0.0

从结果可以看出默认排序是根据id进行排序。

(7) 完成自定义评分,在默认排序以三星为条件作同时以vip等级排序。

@Test

public void testVipPageQuery()throws Exception{

    SolrQuery solrQuery = new SolrQuery();

    //关键词

    solrQuery.set("q","t_searchText:*三星*");

    //分页,0开始,每页20条,setStart设置的就是显示第几页

    solrQuery.setStart(0);

    solrQuery.setRows(20);

    //设置权重方式为edismax

    solrQuery.set("defType","edismax");

    //scoreMethod为自定义评分规则,这里就是以t_vip+0的和来得到评分,然后以该评分进行排序

    String scoreMethod = "sum(t_vip,0)";

    solrQuery.set("bf", scoreMethod);

    //执行查询

    QueryResponse respOnse= client.query(solrQuery);

    //文档结果集

    SolrDocumentList results = response.getResults();

    System.out.println("查询到的总条数:"+ results.getNumFound());

    //遍历查询的结果

    for (SolrDocument solrDocument : results) {

       String id = solrDocument.get("id").toString();

       String title = solrDocument.get("t_title").toString();

       String assess = solrDocument.get("t_assess").toString();

        String point = solrDocument.get("t_point").toString();

        String vip = solrDocument.get("t_vip").toString();

        //double point = Double.valueOf(solrDocument.get("t_point").toString());

        //double vip = Double.valueOf(solrDocument.get("t_vip").toString());

        System.out.println("id:"+id+" 标题:"+title+" 评价:"+assess+ "点击率:"+point+" vip等

级:"+vip+" " );

    }

}

结果如下:

查询到的总条数:100

id:4 标题:new4- 三星 W400 黑色 电信3G手机 双卡双待双通 三星 评价:9点击率:13 vip等级:4

id:9 标题:new9- 三星 W900 黑色 电信3G手机 双卡双待双通 评价:14点击率:9 vip等级:4

id:14 标题:new14- 三星 W1400 黑色 电信3G手机 双卡双待双通 三星 评价:8点击率:14 vip等级:4

id:19 标题:new19- 三星 W1900 黑色 电信3G手机 双卡双待双通 评价:13点击率:10 vip等级:4

id:24 标题:new24- 三星 W2400 黑色 电信3G手机 双卡双待双通 三星 评价:7点击率:15 vip等级:4

id:29 标题:new29- 三星 W2900 黑色 电信3G手机 双卡双待双通 评价:12点击率:11 vip等级:4

id:34 标题:new34- 三星 W3400 黑色 电信3G手机 双卡双待双通 三星 评价:6点击率:16 vip等级:4

id:39 标题:new39- 三星 W3900 黑色 电信3G手机 双卡双待双通 评价:11点击率:12 vip等级:4

id:44 标题:new44- 三星 W4400 黑色 电信3G手机 双卡双待双通 三星 评价:5点击率:17 vip等级:4

id:49 标题:new49- 三星 W4900 黑色 电信3G手机 双卡双待双通 评价:10点击率:13 vip等级:4

id:54 标题:new54- 三星 W5400 黑色 电信3G手机 双卡双待双通 三星 评价:15点击率:9 vip等级:4

id:59 标题:new59- 三星 W5900 黑色 电信3G手机 双卡双待双通 评价:9点击率:14 vip等级:4

id:64 标题:new64- 三星 W6400 黑色 电信3G手机 双卡双待双通 三星 评价:14点击率:10 vip等级:4

id:69 标题:new69- 三星 W6900 黑色 电信3G手机 双卡双待双通 评价:8点击率:15 vip等级:4

id:74 标题:new74- 三星 W7400 黑色 电信3G手机 双卡双待双通 三星 评价:13点击率:11 vip等级:4

id:79 标题:new79- 三星 W7900 黑色 电信3G手机 双卡双待双通 评价:7点击率:16 vip等级:4

id:84 标题:new84- 三星 W8400 黑色 电信3G手机 双卡双待双通 三星 评价:12点击率:12 vip等级:4

id:89 标题:new89- 三星 W8900 黑色 电信3G手机 双卡双待双通 评价:6点击率:17 vip等级:4

id:94 标题:new94- 三星 W9400 黑色 电信3G手机 双卡双待双通 三星 评价:11点击率:13 vip等级:4

id:99 标题:new99- 三星 W9900 黑色 电信3G手机 双卡双待双通 评价:5点击率:9 vip等级:4

可以看出我们以自定义评分的方式,该结果就以vip等级最高的进行排序。

备注:关于solr更多的自定义排序都是利用solr的Function Query函数进行的。可以自行查看solr的api进行学习。

猜你喜欢:


推荐阅读
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
  • 部署solr建立nutch索引
    2019独角兽企业重金招聘Python工程师标准接着上篇nutch1.4的部署应用,我们来部署一下solr,solr是对lucene进行了封装的企 ... [详细]
  • solr导入mysql_Solr导入MySQL中的数据
    一、目标将MySQL数据库中的数据导入至Solr中,并且由Solr生成中文索引,使用Solr查询信息。二、数据导入1、将solr-8.2.0dist下的 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 如何实现JDK版本的切换功能,解决开发环境冲突问题
    本文介绍了在开发过程中遇到JDK版本冲突的情况,以及如何通过修改环境变量实现JDK版本的切换功能,解决开发环境冲突的问题。通过合理的切换环境,可以更好地进行项目开发。同时,提醒读者注意不仅限于1.7和1.8版本的转换,还要适应不同项目和个人开发习惯的需求。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 使用freemaker生成Java代码的步骤及示例代码
    本文介绍了使用freemaker这个jar包生成Java代码的步骤,通过提前编辑好的模板,可以避免写重复代码。首先需要在springboot的pom.xml文件中加入freemaker的依赖包。然后编写模板,定义要生成的Java类的属性和方法。最后编写生成代码的类,通过加载模板文件和数据模型,生成Java代码文件。本文提供了示例代码,并展示了文件目录结构。 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • 在工作中,遇到需要将excel表中的特定数据提取出来,并将数据以键值对的形式存储到map集合中。因为我用的是maven管理的jar包,所 ... [详细]
  • camel_使用Camel在来自不同来源的Solr中索引数据
    camelApacheSolr是建立在Lucene之上的“流行的,快速的开源企业搜索平台”。为了进行搜索(并查找结果),通常需要从不同的源(例如内容管理 ... [详细]
  • 一:什么是solrSolr是apache下的一个开源项目,使用Java基于lucene开发的全文搜索服务器;Lucene是一个开放源代 ... [详细]
  • Lucene 全文检索技术入门
    一、搜索引擎的历史萌芽:Archie、Gopher起步:Robot(网络机器人)的出现与spider(网络爬虫)发展:excite、galax ... [详细]
  • Flume 开源分布式日志收集系统
    为什么80%的码农都做不了架构师?Flume--开源分布式日志收集系统Flume是Cloudera提供的一个高可用的、高可靠的开源分布式海量日志收集系统 ... [详细]
author-avatar
backup哗哗-1996
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有