Solr 部署笔记

43 阅读1分钟

参考文档

Solr 9+ 特征

  • 默认托管方式运行,一般情况不需要手动编辑 managed-schema.xml
  • 通过 API 配置 Core 不需要重启 Solr
  • 取消了 DIH ,数据导入需要单独的插件或程序控制

Solr 中的默认字段

  • id 字段:默认的唯一主键,添加数据时自动生成的 uuid
  • _nest_path_ 字段:用于处理嵌套文档(Nested Documents)时记录文档的层级路径
  • _root_ 字段:标识文档的根节点位置,用于分布式索引和分片管理
  • _text_ 字段:作为动态字段的默认搜索字段,包含所有 text_* 类型字段的聚合内容
  • _version_字段:实现乐观并发控制的版本号字段

添加 IK 分词器

  • github.com/dev-byvoid/…
  • 源代码中需要有 IKTokenizerFactory.java 用于创建 Tokenizer
  • 使用 Maven 打包 Java 代码,并将 jar 文件复制到 lib 文件夹
    # 打包 jar 文件
    cd ik-analyzer
    mvn clean package
    
    # 复制到 lib 文件夹
    cd target
    docker cp ik-analyzer-9.0.0.jar /opt/solr/lib
    docker cp ik-analyzer-9.0.0-sources.jar /opt/solr/lib
    
    # /opt/solr/lib 对所有 solr core 都有效
    # ../core_name/lib 仅对当前 core 有效
    # https://solr.apache.org/guide/solr/latest/configuration-guide/libs.html
    
  • 配置 fieldType
    # indexAnalyzer 表示索引时的 Tokenizer
    # queryAnalyzer 表示查询时的 Tokenizer
    # useSmart=true 时拆词不会出现重新,粒度更粗,索引效率更高
    
    curl -X POST -H 'Content-type:application/json' --data-binary '{
    "add-field-type":{
       "name":"text_zh_id",
       "class":"solr.TextField",
       "indexAnalyzer":{
          "tokenizer":{
             "class":"org.wltea.analyzer.lucene.IKTokenizerFactory",
             "useSmart":"true" 
         }},
       "queryAnalyzer":{
          "tokenizer":{
             "class":"org.wltea.analyzer.lucene.IKTokenizerFactory",
             "useSmart":"false" 
         }}}
     }' http://localhost:8983/solr/techproducts/schema
    
  • 配置 IK 词典和停用词
    • 创建文件夹 /opt/solr/classes

    • IKAnalyzer.cfg.xml:主配置文件

    • ext.dic:自定义新词

    • stopword.dic:需要过滤的无意义词