居家新主张elasticsearch⼀个准实时的搜索引擎,基于lucene构建,它的主要强项还是在全⽂检索⽅⾯。⼯作中还是使⽤到了这部分功能,这⾥做⼀个简单的总结,可以使初次使⽤的⼈很快的配置和使⽤。
⼀、全⽂检索的概念
⾸先介绍全⽂检索的概念,就是对⼀篇⽂章进⾏索引,可以根据关键字搜索,类似于mysql⾥的like语句。
全⽂索引就是把内容根据词的意义进⾏分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你 们“,”激情“,“什么事情“,”来“ 等token
这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。
elasticsearch实现全⽂索引,⾸先要确定分词器,elasticsearch默认有很多分词器,你可以参考elasticsearch的官⽅⽂档。了解分词器主要是怎么实现的。
你可以使⽤
curl -XPOST “我是中国⼈”
命令来了解各种分词器的分词效果。
{
“token”: “我”,
“start_offset”: 1,
“end_offset”: 2,
“type”: “”,
“position”: 0
}
,
{
“token”: “是”,
“start_offset”: 2,
“end_offset”: 3,
“type”: “”,
“position”: 1
}
,
{
“token”: “中”,
“start_offset”: 3,
“end_offset”: 4,
“type”: “”,
线粒体基因组测序
“position”: 2
}
,
{
“token”: “国”,
“start_offset”: 4,
“end_offset”: 5,
“type”: “”,
“position”: 3有线电视解码器
}
苏州大学体育学院
,
{
“token”: “⼈”,
“start_offset”: 5,
“end_offset”: 6,
“type”: “”,
“position”: 4
}
三、中⽂分词器
三、中⽂分词器
⼀般中⽂分词器⼀般使⽤第三⽅的ik分词器、mmsegf分词器和paoding分词器,他们最初可能构建于lucene,后来移植于elasticsearch。 在最新版的elasticsearch,我主要使⽤了ik分词器。
我使⽤的elsaticsearch是2.3.3,elasticsearch和ik分词的对应版本:
ik分词的安装:
去ik分词的github去下载源码⽤maven编译:
对应⽬录:
美国蓝动力
IndicesAdminClient indicesAdminClient = client.admin().indices();
AnalyzeAction analyzeAction = AnalyzeAction.INSTANCE;
System.out.println("ik分词分析:"+"中华⼈民共和国国歌 ");
AnalyzeRequestBuilder request = new AnalyzeRequestBuilder(indicesAdminClient,analyzeAction,"text","中华⼈民共和国国歌");
request.setAnalyzer("ik_max_word");
// request.setAnalyzer("ik_smart");
request.setTokenizer("ik");
// Analyzer(分析器)、Tokenizer(分词器)
List<AnalyzeResponse.AnalyzeToken> listAnalysis = ute().actionGet().getTokens();
for( AnalyzeResponse.AnalyzeToken b : listAnalysis ){
System.out.println( b.getTerm() );
}
ik_max_word: 会将⽂本做最细粒度的拆分,⽐如会将“中华⼈民共和国国歌”拆分为“中华⼈民共和国,中华⼈民,中华,华⼈,⼈民共和国,⼈民,⼈,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合;
ik_smart: 会做最粗粒度的拆分,⽐如会将“中华⼈民共和国国歌”拆分为“中华⼈民共和国,国歌”。
可根据需求去选择所需要的分词器。