zoukankan      html  css  js  c++  java
  • Solr 06

    1 配置中文分词器

    1.1 准备IK中文分词器

    (1) 复制IK解压目录中的jar包: IKAnalyzer2012FF_u1.jar. 可以在 我的GitHub 中下载, 文件是IK Analyzer 2012FF_hf1.zip.

    (2) 粘贴到tomcat/webapps/solr/WEB-INF/lib目录.

    (3) 复制IK解压目录中的配置文件:
    图片

    (4) 粘贴到tomcat/webapps/solr/WEB-INF/classes目录.

    1.2 配置schema.xml文件

    (1) 加入使用IK分词器的域类型

    <!--加入使用ik分词器的域类型-->
    <fieldType name="text_ik" class="solr.TextField">
        <analyzer class="org.wltea.analyzer.lucene.IKAnalyzer" />
    </fieldType>
    

    (2) 加入使用IK分词器的域

    <!--加入使用ik分词器的域-->
    <field name="content_ik" type="text_ik" 
           indexed="false" stored="true" multiValued="true"/>
    
    图片

    1.3 重启Tomcat并测试

    选择任意Core, 然后在菜单栏里选择[Analysis], 输入中文语句, 进行分词测试:
    图片

    2 配置业务域

    需求引入: 假设现在要使用Solr完成电商网站商品数据的搜索, 需要将保存在关系数据库中的商品数据导入到Solr索引库中.

    2.1 准备商品数据

    DROP DATABASE IF EXISTS `solr`;
    CREATE DATABASE `solr`;
    USE `solr`;
    
    SET FOREIGN_KEY_CHECKS=0;
    
    DROP TABLE IF EXISTS `products`;
    CREATE TABLE `products` (
        `pid` int(11) NOT NULL AUTO_INCREMENT COMMENT '商品编号',
        `name` varchar(255) DEFAULT NULL COMMENT '商品名称',
        `catalog` int(11) DEFAULT NULL COMMENT '商品分类ID',
        `catalog_name` varchar(50) DEFAULT NULL COMMENT '商品分类名称',
        `price` double DEFAULT NULL COMMENT '价格',
        `number` int(11) DEFAULT NULL COMMENT '数量',
        `description` longtext COMMENT '商品描述',
        `picture` varchar(255) DEFAULT NULL COMMENT '图片名称',
        `release_time` datetime DEFAULT NULL COMMENT '上架时间',
        PRIMARY KEY (`pid`)
    ) ENGINE=InnoDB AUTO_INCREMENT=6126 DEFAULT CHARSET=utf8;
    

    测试数据较大, 具体的SQL文件可以在 我的GitHub 中下载, 文件是Solr使用IK分词器的表数据.sql.

    2.2 配置商品业务域

    说明: 分析商品数据库表, 确定哪些字段需要在Solr中建立索引和存储.

    字段: pid, name, catalog, catalog_name, price, description, picture

    (1) 商品Id(直接使用Solr的id域):

    <field name="id" type="string" indexed="true" stored="true" required="true" multiValued="true"/> 
    

    (2) 商品名称(若要用于高亮显示, 必须设置stored="true"):

    <field name="product_name" type="text_ik" indexed="true" stored="true" /> 
    

    (3) 商品分类id:

    <field name="product_catalog" type="int" indexed="true" stored="true" /> 
    

    (4) 商品分类名称(String类型, 表示整体匹配, 不作分词):

    <field name="product_catalog_name" type="string" indexed="true" stored="true" /> 
    

    (5) 商品价格:

    <field name="product_price" type="double" indexed="true" stored="true" /> 
    

    (6) 商品描述:

    <field name="product_description" type="text_ik" indexed="true" stored="false" /> 
    

    (7) 商品图片:

    <field name="product_picture" type="string" indexed="false" stored="true" /> 
    

    (8) 配置商品复制域(stored="true", 实际开发中multiValued="true"的field不需要存储, 这里存储便于观察效果):

    <!-- 加入商品搜索复制域, 即将商品名、商品类型和描述都作为搜索关键词提供搜索 -->
    <field name="product_keywords" type="text_ik" indexed="true" stored="true" multiValued="true"/> 
    <copyField source="product_name" dest="product_keywords"/>
    <copyField source="product_catalog_name" dest="product_keywords"/>
    <copyField source="product_description" dest="product_keywords"/>
    

    2.3 配置schema.xml文件

    注意: 这里id使用Solr默认的id域(一定要有主键, 没有则需要将默认的id域删除, 也可更改id生成策略. 尝试过未在库中设置主键而此文件中的id域未删除也未重写, 此时可以建立索引, 却无法检索到结果(⊙﹏⊙)):

    图片

    2.4 重新启动Tomcat并查看配置

    选中任意一个core, 选择Analysis, 在 [Fieldname / FieldType] 处查看, 观察配置是否成功:
    图片

    版权声明

    作者: 马瘦风

    出处: 博客园 马瘦风的博客

    您的支持是对博主的极大鼓励, 感谢您的阅读.

    本文版权归博主所有, 欢迎转载, 但请保留此段声明, 并在文章页面明显位置给出原文链接, 否则博主保留追究相关人员法律责任的权利.

  • 相关阅读:
    Fragments (Android官方文档中文版)
    Fragment and activity的生命周期对比和区别
    frida报错frida.InvalidArgumentError: device not found问题解决方案
    XCTF---easyjava的WriteUp
    XCTF---easyjni的WriteUp
    日常破解--从XCTF的app3题目简单了解安卓备份文件以及sqliteCipher加密数据库
    Anroid关于fragment控件设置长按事件无法弹出Popupwindows控件问题解决记录
    DEX文件解析---2、Dex文件checksum(校验和)解析
    日常破解--XCTF easy_apk
    日常破解---XCTF_APP1获取flag记录
  • 原文地址:https://www.cnblogs.com/shoufeng/p/9539608.html
Copyright © 2011-2022 走看看