一、配置中文分词器

  1. 该功能是将数据库中的数据通过sql语句的方式导入到solr索引库中

    1.1 添加jar

  2. D:\solr\solr-7.7.3\distsolr-dataimporthandler-7.7.3.jarsolr-dataimporthandler-extras-7.7.3.jar导入到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib

  3. mysql-connector-java-x.x.xx.jar导入D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib

    1. mysql-connector-java-x.x.xx.jar下载地址:https://downloads.mysql.com/archives/c-j/

      1.2 配置中文分词器

  4. 找到自带的中文分词器D:\solr\solr-7.7.3\contrib\analysis-extras\lucene-libs,将其中的jar包全部复制到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib

  5. 进入刚才创建的core所在目录D:\solr\solr_home\core_demo\conf,修改文件managed-schema,将如下内容复制到文件的最下方保存退出

    1. 其中,name="solr_cnAnalyzer"可以自定义为自己想要的内容
      1. <!-- ChineseAnalyzer -->
      2. <fieldType name="solr_cnAnalyzer" class="solr.TextField" positionIncrementGap="100">
      3. <analyzer type="index">
      4. <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      5. </analyzer>
      6. <analyzer type="query">
      7. <tokenizer class="org.apache.lucene.analysis.cn.smart.HMMChineseTokenizerFactory"/>
      8. </analyzer>
      9. </fieldType>
  6. 配置好后,重新启动D:\solr\apache-tomcat-8.5.76-solr-8081\bin目录下的startup.bat,刷新主页面,即可选择刚才配置的分词器

image.png

  1. 1. 测试分词效果

image.png

1.3 配置IKAnalyzer分词器

  1. 将下载好的IKAnalyzerjar包拷贝到D:\solr\apache-tomcat-8.5.76-solr-8081\webapps\solr\WEB-INF\lib
    1. 下载地址:https://github.com/magese/ik-analyzer-solr
  2. 进入D:\solr\solr_home\core_demo\conf,修改文件managed-schema,将如下内容复制到文件的最下方保存退出

    1. <!-- IKAnalyzer -->
    2. <fieldType name="text_ik" class="solr.TextField">
    3. <analyzer type="index">
    4. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
    5. <filter class="solr.LowerCaseFilterFactory"/>
    6. </analyzer>
    7. <analyzer type="query">
    8. <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
    9. <filter class="solr.LowerCaseFilterFactory"/>
    10. </analyzer>
    11. </fieldType>
  3. 配置好后,重新启动D:\solr\apache-tomcat-8.5.76-solr-8081\bin目录下的startup.bat,刷新主页面,即可选择刚才配置的分词器

image.png

二、managed-schema文件详解

  1. managed-schema文件中主要配置solrCore数据信息,包括FieldFieldType的定义等信息,在solr中,FieldFieldType都需要先定义后使用

    2.1 Field详解

  2. <field name="text_rev" type="text_general_rev" indexed="true" stored="false" multiValued="true"/>

  3. name:指定field的名称(自定义)
    1. 域名不能重复
  4. type:指定field的类型
  5. indexed:是否索引
    1. 是:将分好的词进行索引,加快检索速度
    2. 否:对该field不存在检索操作
  6. stored:是否存储
    1. 是:将field中的内容存储到文档域中,目的是为了搜索页面展示取值
    2. 否:不存储该field中的内容,搜索页面中无法获取该field的值
  7. required:是否必须
  8. multiValued:是否多值,如查询数据需要关联多个字段数据时,一个field中存储多个值的信息,则需要将multiValued设置为true

    2.2 dynamicField动态域

  9. <dynamicField name="*_i" type="pint" indexed="true" stored="true"/>

  10. name="*_i",定义其type=int,则在使用此字段时,任何以_i为结果的字段都被认为符合此定义

    2.3 uniqueKey唯一域

  11. <uniqueKey>id</uniqueKey>

  12. 其中的id表示在field标签中已经定义好的域名,且该域设置required=true
  13. 一个managed-schema文件中有且仅有一个唯一键

    2.4 copyField复制域

  14. <copyField source="cat" dest="text"/>

  15. 将多个域的关键词复制到同一个域或者多个域时,可以放到一个域中
  16. source:源field的名称
  17. dest:目标field的名称
    1. 目标fieldmultiValued一定为true
  18. 实例 ```xml

  1. <a name="V4e8a"></a>
  2. ## 2.5 `fieldType`域类型
  3. 1. `<fieldType name="pdate" class="solr.DatePointField" docValues="true"/>`
  4. 1. `solr`中`fieldType`域类型与`javaBean`中的类型对应关系
  5. 1. `string -> String`
  6. 1. `boolean -> Boolean`
  7. 1. `pint -> Integer`
  8. 1. `pdouble -> Double`
  9. 1. `plong -> Long`
  10. 1. `pfloat -> Float`
  11. 1. `pdate -> Date`
  12. <a name="FcDVc"></a>
  13. ## 2.6 `Analyser`分词器
  14. ```xml
  15. <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
  16. <analyzer type="index">
  17. <tokenizer class="solr.StandardTokenizerFactory"/>
  18. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
  19. <!-- in this example, we will only use synonyms at query time
  20. <filter class="solr.SynonymGraphFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/>
  21. <filter class="solr.FlattenGraphFilterFactory"/>
  22. -->
  23. <filter class="solr.LowerCaseFilterFactory"/>
  24. </analyzer>
  25. <analyzer type="query">
  26. <tokenizer class="solr.StandardTokenizerFactory"/>
  27. <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" />
  28. <filter class="solr.SynonymGraphFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
  29. <filter class="solr.LowerCaseFilterFactory"/>
  30. </analyzer>
  31. </fieldType>
  1. name:指定域类型的名称
  2. class:指定该域类型对应的solr类型
  3. analyzer:指定分词器
  4. tokenizer:指定分词器类型
  5. typeindexquery,用于指定索引和搜索时的分词器
  6. Filter:指定过滤器

    三、Dataimport数据库数据导入

    3.1 修改solrconfig.xml文件

  7. 进入D:\solr\solr_home\core_demo\conf找到solrconfig.xml文件

  8. 查询是否存在dataimportrequestHandler,若不存在则手动添加

    1. 为了方便后续维护,在requestHandler的起始位置(约720行处)添加如下内容

      1. <!-- dataimport -->
      2. <requestHandler name="/dataimport" class="org.apache.solr.handler.dataimport.DataImportHandler">
      3. <lst name="defaults">
      4. <str name="config">data-config.xml</str>
      5. </lst>
      6. </requestHandler>
    2. data-config.xml名字可以自定义


    3. 3.2 创建data-config.xml文件

  9. solrconfig.xml文件同级目录下创建data-config.xml文件

  10. data-config.xml文件的作用:

    1. 数据库连接的相关信息
    2. SQL以及查询结果映射到对应的域
    3. data-config.xml内容
    4. 注意!!entity中必须包含一个主键id
      1. <dataConfig>
      2. <dataSource type="JdbcDataSource"
      3. driver="com.mysql.jdbc.Driver"
      4. url="jdbc:mysql://localhost:3306/databesename(替换为自己的数据库链接)"
      5. user="username"
      6. password="password"/>
      7. <document>
      8. <entity name="tableName"
      9. query="SELECT columnName_1,...,columnName_n from tableName">
      10. <field column="columnName_1" name="id"/>
      11. <field column="columnName_1" name="name_1"/>
      12. ...
      13. <field column="columnName_n" name="name_n"/>
      14. </entity>
      15. </document>
      16. </dataConfig>
  11. data-config.xml详解

    1. dataSource中添加MySQL连接配置
    2. document中定义数据库查询设置
      1. entity为数据表的实体定义
        1. name数据表名
        2. query查询语句,可以实现多表查询
      2. fieldfield中的column对应于数据表query查询的columnName_iname类似于自己定义的别名,且namename_i必须在managed-schema文件中定义
  12. managed-schema文件中定义data-config.xml中的fieldname对应的name_i

    1. <!-- gyy_mall 表中各个属性的定义-->
    2. <field name="itemid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/>
    3. <field name="catid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/>
    4. <field name="areaid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/>
    5. <field name="title" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/>
    6. <field name="price" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/>
    7. <field name="keyword" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/>
    8. <field name="company" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/>
    9. <field name="address" type="text_ik" indexed="true" stored="true" required="true" multiValued="false"/>
    10. <field name="pid" type="pint" indexed="false" stored="true" required="true" multiValued="false"/>
    1. 此处的定义需要根据自己的需求定义
    2. type="text_ik"表示定义分词器的名称
  13. 重启tomcat服务

image.png

  1. 点击Execute,将数据从数据库中读出
  2. query中查询数据

image.png