Solr 8 ik-analyzer 中文分词 基本使用篇

分词器相关包:该github文档有详细说明,建议先看看。

https://github.com/magese/ik-analyzer-solr?tab=readme-ov-file

写了测试代码,对源代码感兴趣的可以看看

bash 复制代码
package org.wltea.analyzer.test;

import org.apache.lucene.analysis.Tokenizer;
import org.apache.lucene.analysis.tokenattributes.CharTermAttribute;
import org.apache.lucene.util.AttributeFactory;
import org.wltea.analyzer.lucene.IKTokenizerFactory;

import java.io.IOException;
import java.io.StringReader;
import java.util.HashMap;
import java.util.Map;

public class Test {
    public static void main(String[] args) {
        // 创建参数映射
        Map<String, String> argsMap = new HashMap<>();
        argsMap.put("useSmart", "false"); // 设置为细粒度分词模式

        try {
            // 创建 IKTokenizerFactory 实例
            IKTokenizerFactory factory = new IKTokenizerFactory(argsMap);

            // 创建 tokenizer
            AttributeFactory attributeFactory = AttributeFactory.DEFAULT_ATTRIBUTE_FACTORY;
            Tokenizer tokenizer = factory.create(attributeFactory);

            // 测试文本
            String text = "测试文本";

            // 设置要分析的文本
            tokenizer.setReader(new StringReader(text));
            tokenizer.reset();

            // 执行分词并输出结果
            System.out.println("分词结果:");
            while (tokenizer.incrementToken()) {
                CharTermAttribute term = tokenizer.getAttribute(CharTermAttribute.class);
                System.out.println(term.toString());
            }

            tokenizer.end();
            tokenizer.close();

            System.out.println("\n使用智能分词模式:");
            // 测试智能分词模式
            argsMap.put("useSmart", "true");
            IKTokenizerFactory smartFactory = new IKTokenizerFactory(argsMap);
            Tokenizer smartTokenizer = smartFactory.create(attributeFactory);

            smartTokenizer.setReader(new StringReader(text));
            smartTokenizer.reset();

            // 执行分词并输出结果
            while (smartTokenizer.incrementToken()) {
                CharTermAttribute term = smartTokenizer.getAttribute(CharTermAttribute.class);
                System.out.println(term.toString());
            }

            smartTokenizer.end();
            smartTokenizer.close();

        } catch (IOException e) {
            System.err.println("测试过程中发生IO异常: " + e.getMessage());
            e.printStackTrace();
        }
    }

}

1.本地solr版本 solr-8.11.3 。准备工作:下载 ik-analyzer-8.5.0.jarlucene-core-8.5.0.jarlucene-analyzers-common-8.5.0.jar 。(我单独使用ik-analyzer-8.5.0.jar,会有包缺失问题,大家可以试试仅仅使用 ik-analyzer-8.5.0.jar可以不。)

将文件放入下面路径

bash 复制代码
		1. \solr-8.11.3\server\solr-webapp\webapp\WEB-INF\lib
		2.solr-8.11.3\server\lib\ext

2.配置Solr的(solr-8.11.3\server\solr\new_core\conf)managed-schema,添加ik分词器。相关字段加上相关类型分词属性,示例如下;

bash 复制代码
<!-- ik分词器 -->
<fieldType name="text_ik" class="solr.TextField">
  <analyzer type="index">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="false" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
  <analyzer type="query">
      <tokenizer class="org.wltea.analyzer.lucene.IKTokenizerFactory" useSmart="true" conf="ik.conf"/>
      <filter class="solr.LowerCaseFilterFactory"/>
  </analyzer>
</fieldType>
<!-- 相关字段加上相关类型  -->
  <field name="title" type="text_ik" indexed="true" stored="true"/>

3.添加ik.conf到 (solr-8.11.3\server\solr\new_core\conf) ik.conf内容

bash 复制代码
files=dynamicdic.txt
lastupdate=0

4.添加自己的扩展词汇词典,相关路径(solr-8.11.3\server\solr-webapp\webapp\WEB-INF

新增classes文件,将ext.dic添加到该路径下。

根据源代码 提示添加自己想要的文件和提示词到文件中。

5.启动服务,测试自己家的分词

bash 复制代码
./solr start -p 8984
相关推荐
步步为营DotNet6 天前
深度解析.NET中LINQ的延迟执行:提升性能与资源管理的关键
.net·solr·linq
Java后端的Ai之路11 天前
【Solr搜索引擎】-Solr知识点内容很详细
搜索引擎·solr·lucene
Elastic 中国社区官方博客12 天前
Elasticsearch 用于词形还原的开源 Hebrew 分析器
大数据·elasticsearch·搜索引擎·ai·开源·全文检索·中文分词
JTfAbUGXr19 天前
基于粒子群优化支持向量机(PSO-SVM)的多变量时间序列预测 PSO-SVM多变量时间序列 ...
中文分词
oIFnupWZw20 天前
基于卷积神经网络的模糊车牌识别系统
中文分词
凸头25 天前
PostgreSQL 16 中文分词插件 zhparser 在 Windows 11 上的编译与安装
windows·postgresql·中文分词
喵叔哟1 个月前
05-LINQ查询语言入门
c#·solr·linq
那起舞的日子1 个月前
ElasticSearch系列-2-中文分词器和复合查询与高亮显示
elasticsearch·中文分词
闻哥1 个月前
深入理解 ES 词库与 Lucene 倒排索引底层实现
java·大数据·jvm·elasticsearch·面试·springboot·lucene
龙山云仓1 个月前
No140:AI世间故事-对话康德——先验哲学与AI理性:范畴、道德律与自主性
大数据·人工智能·深度学习·机器学习·全文检索·lucene