lucene_demo_ikAnalyzer

lucene和ik分词器

使用Lucene-Spatial实现集成地理位置的全文检索 - 刺猬的温驯 - 博客园

Springboot下的Lucene(详细版)_程序猿开发日志【学习永无止境】-CSDN博客

Lucene搭建搜索引擎初探 | 大嘴怪的小世界

索引(Index) –> 段(segment) –> 文档(Document) –> 域(Field) –> 词(Term)

https://hub.fastgit.org/blueshen/ik-analyzer.git 使用的ik分词器地址同时

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
       <properties>
<!-- <lucene.version>8.9.0</lucene.version>-->
<lucene.version>7.2.1</lucene.version>
</properties>



<!-- Lucene 核心库 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-core</artifactId>
<version>${lucene.version}</version>
</dependency>

<!-- Lucene 解析库 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-queryparser</artifactId>
<version>${lucene.version}</version>
</dependency>

<!-- Lucene 附加的分析库 -->
<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-analyzers-common</artifactId>
<version>${lucene.version}</version>
</dependency>

<dependency>
<groupId>org.apache.lucene</groupId>
<artifactId>lucene-test-framework</artifactId>
<version>${lucene.version}</version>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.wltea.ik-analyzer</groupId>
<artifactId>ik-analyzer</artifactId>
<version>9.0.0</version>
</dependency>

使用luke来查询索引的数据

image-20220111100347933

lucene集成ik和pinyin分词器

pinyin4j-2.5.1.jar

pinyinAnalyzer4.3.1.jar

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
        <dependency>
<groupId>com.belerweb</groupId>
<artifactId>pinyin4j</artifactId>
<version>2.5.1</version>
<!-- <scope>system</scope>-->
<!-- <systemPath>${project.basedir}/src/main/resources/lib/pinyin4j-2.5.0.jar</systemPath>-->
<systemPath>${pom.basedir}/src/main/resources/lib/pinyin4j-2.5.1.jar</systemPath>
</dependency>
<dependency>
<groupId>com.shentong</groupId>
<artifactId>pinyinAnalyzer</artifactId>
<version>4.3.1</version>
<scope>system</scope>
<systemPath>${pom.basedir}/src/main/resources/lib/pinyinAnalyzer4.3.1.jar</systemPath>
</dependency>

该部分参考

实现的原理就是使用创建个 IndexPinyinAnalyzer 使用IKTokenizer 和PinyinTransformTokenFilter实现分词汉字和拼音的效果

测试的部分代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public static void main(String[] args) throws IOException {
Analyzer analyzer = new IndexPinyinAnalyzer(false);
TokenStream tokenStream = analyzer.tokenStream("fff", "标高1-KL33");
//添加一个引用,可以获得每个关键词
CharTermAttribute charTermAttribute = tokenStream.addAttribute(CharTermAttribute.class);
//添加一个偏移量的引用,记录了关键词的开始位置以及结束位置
OffsetAttribute offsetAttribute = tokenStream.addAttribute(OffsetAttribute.class);
//将指针调整到列表的头部
tokenStream.reset();
//遍历关键词列表,通过incrementToken方法判断列表是否结束
while(tokenStream.incrementToken()) {
//关键词的起始位置
System.out.println("start---------------" + offsetAttribute.startOffset());
//取关键词
System.out.println("分词内容: "+charTermAttribute);
//结束位置
System.out.println("end---------------------" + offsetAttribute.endOffset());
}
tokenStream.close();

}

打印结果

start—————0
分词内容标高
end———————2
start—————0
分词内容bg
end———————2
start—————2
分词内容1-kl33
end———————8
start—————4
分词内容kl
end———————6
start—————6
分词内容33
end———————8

需要注意几点

  1. pinyin4j 需要是2.5.1
  2. 分词和使用的dic有关,笔者使用的默认值,在日志中会打印org.wltea.analyzer.dic.Dictionary - 加载扩展停止词典:org/wltea/analyzer/dic/stopword.dic