zoukankan      html  css  js  c++  java
  • solr第二天 京东案例

    一、案例
    电商网站的搜索
    在互联网项目中做搜索都应该使用全文检索。
    查询的是索引库,搜索功能跟数据库没有关系。
    实现分析:
    1、先创建索引库
    需要把数据库中的数据导入到索引库中。
    需要把数据库中每个字段的内容放到索引库中对应的域中
    在索引库中需要先定义业务域。
    需要在schema.xml中定义业务域
    需要配置中文分析器。
    2、实现查询功能

    二、定义业务域
    1、schema.xml
    1)field域的定义
    name:域的名称
    type:域的数据类型。是否分析取决于数据类型
    类型都是在schema.xml中定义的。
    indexed:是否索引
    stored:是否存储
    multiValued:是否多值
    2)dynamicField:动态域
    name属性是一个表达式。如果域的名称能和表达式向匹配那么这个域就可以使用
    3)uniqueKey:定义索引库中的主键。
    4)copyField:复制域
    source:源域
    dest:目标域
    作用:当向索引库中添加文档时,solr会自动的把源域中的内容复制到目标域中。例如查两个域中的公共部分 
    查询优化的手段。
    5)fieldType:域的类型定义
    name:域类型的名称
    class:类型对应的实现类
    如果使用自定义分析器的话fieldType的class必须是solr.TextField
    2、中文分析器的配置
    配置步骤:
    1)把IK的jar包添加到solr工程中。
    2)把IK的配置文件扩展词典添加到solr工程的classpath下
    3)在schema.xml中定义一个fieldType,class必须是solr.TextField
    4)在filedType中指定使用IK作为分析器。
    5)重启tomcat
    3、业务域的定义
    分析:
    pid,name,catalog_name,price,description,Picture
    三、创建索引库
    方案一:(项目中一般采用)
    使用java代码实现。
    从数据库中读取数据,使用solrj把数据写入索引库。
    方案二:
    使用solr的数据导入功能。

    配置方法:
    1、把DataImport需要的jar包添加到solr工程中。
    solr-dataimporthandler-4.10.3.jar
    solr-dataimporthandler-extras-4.10.3.jar
    mysql的数据库驱动
    mysql-connector-java-5.1.7-bin.jar
    可以把jar包放到:
    solrhomecollection1lib目录下,如果没有需要手动创建。solr启动后会自动加载。
    2、需要在solrconfig.xml配置数据导入功能。
    需要创建一个data-config.xml文件,其中配置数据库连接串,sql语句及结果集的映射关系。
    此文件应该和solrconfig.xml在同一个目录下。
    3、重启tomcat
    四、查询索引库
    1、使用solr的后台实现查询
    q:主查询条件,完全支持lucene的查询语法的。只有一个主查询条件
    fq:过滤条件,可以有多个。在查询结果基础上进行过滤。完全支持lucene的查询语法
    sort:排序条件
    start, rows:分页条件
    start:起始的行号
    rows:每页记录的行数
    fl:结果中包含的域的列表。如果不设置默认返回所有的域。
    df:默认搜索域
    hl:开启高亮显示
    hl.fl:高亮显示的域
    hl.simple.pre:高亮的前缀
    hl.simple.post:高亮显示的后缀

    2、使用solrj查询索引库
    步骤:
    1)创建一个SolrServer对象
    2)创建一个SolrQuery对象。
    3)向SolrQuery对象中设置各种查询条件,可以参考后台。
    4)执行查询
    5)取查询结果
    五、综合案例
    1、需求
    实现一个电商搜索功能。
    2、功能分析
    输入参数:
    1)主查询条件
    2)根据商品分类名称过滤
    3)价格区间过滤
    4)排序条件
    5)分页条件
    输出的结果:
    1)查询结果的总记录数
    2)查询结果的总页数
    3)商品列表
    图片
    价格
    标题(关键词需要高亮显示)
    3、实现步骤
    1、工程搭建
    1)创建一个web工程
    2)添加jar包
    使用springmvc作为表现层框架
    使用solrj的jar包

    2、添加jsp
    3、业务逻辑实现。只需要查询索引库即可。
    4、dao层
    有一些通用的查询方法。
    参数:SolrQuery
    返回值:ResultModel

    需要一个表示商品的类
    需要一个返回结果的类,其中包含商品列表、总记录数、总页数。

    业务逻辑:
    1)根据SolrQuery对象执行查询
    2)取查询结果的总记录数
    3)取商品列表,需要封装到ProductModel对象中
    4)取高亮结果
    5)创建一个ResultModel对象
    6)返回结果
    5、Service
    业务逻辑:
    1、接收参数
    2、创建一个SolrQuery对象
    3、根据参数设置查询条件。
    4、调用dao执行查询,得到一个ResultModel对象。
    5、需要计算总页数。
    6、返回ResultModel对象
    参数:
    1)主查询条件
    2)根据商品分类名称过滤
    3)价格区间过滤 0-9,10-19,20-29,30-* 可以使用字符串表示参数。
    4)排序条件 int类型0:升序 1:降序
    5)分页条件 int类型页码,从1开始。需要有默认值1
    6)每页显示的记录数
    返回值:ResultModel
    6、controller
    参数:
    queryString
    catalog_name
    price
    page
    sort
    页面需要的数据:
    key:
    result
    value:
    ResultModel对象
    返回值:
    String逻辑视图
    业务逻辑:
    1)接收表单提交的数据
    2)调用Service把参数传递给Service
    3)把结果传递给jsp
    4)把查询参数回显
    5)返回逻辑视图
    请求的url:
    /list.action

  • 相关阅读:
    js == 和 === 判断原理
    react 渲染原理
    常见的HTTP状态码
    类数组和数组的区别是什么?
    如何判断一个变量是不是数组?
    typeof 是否正确判断类型? instanceof呢? instanceof 的实现原理是什么?
    前端 js data数组转tree数据结构
    Echarts 基础学习
    Vue CLI 4.0 项目搭建
    Echarts Demo
  • 原文地址:https://www.cnblogs.com/shan1393/p/9308140.html
Copyright © 2011-2022 走看看