Standard Analyzer
elasticsearch实现全文索引,首先要确定分词器,elasticsearch默认有很多分词器,你可以参考elasticsearch的官方文档。我们在这里介绍一下Standard Analyzer。如以下代码:
curl -XGET 'http://localhost:9200/_analyze?analyzer=standard' -d 'This is a demo'
{
"tokens" : [ {
"token" : "this",
"start_offset" : 0,
"end_offset" : 4,
"type" : "ALPHANUM",
"position" : 1
}, {
"token" : "is",
"start_offset" : 5,
"end_offset" : 7,
"type" : "ALPHANUM",
"position" : 2
}, {
"token" : "a",
"start_offset" : 8,
"end_offset" : 9,
"type" : "ALPHANUM",
"position" : 3
}, {
"token" : "demo",
"start_offset" : 10,
"end_offset" : 14,
"type" : "ALPHANUM",
"position" : 4
} ]
}
我们会看到以上结果,是不是把这句话都分成了一个一个的单词。
ES使用默认的全局analyzer, 默认的analyzer是标准analyzer, 这个标准analyzer有三个filter:token filter, lowercase filter和stop token filter。
返回结果中,是不是T变为t了,如果需要不变的话, 你需要修改你的analyzer。
IK分词
一般中文分词器一般使用第三方的ik分词器、mmsegf分词器和paoding分词器,他们最初可能构建于lucene,后来移植于elasticsearch。 在最新版的elasticsearch,我们主要使用了ik分词器。
安装ik分词器到elasticsearch很简单,它有个插件目录analysis-ik,和一个配置目录ik, 分别拷贝到plugins和conf目录就可以了。然后在elasticsearch.yml文件中配置加入如下代码:
index.analsis.analyzer.ik.type : ik
第三方的分词器,你是没法使用,你必须创建一个指定该分词器的索引才行。
curl -XPUT http://localhost:9200/index //创建索引
//创建mapping,只有一个字段content,使用ik作为分词器
curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
"fulltext": {
"_all": {
"indexAnalyzer": "ik",
"searchAnalyzer": "ik",
"store": "false"
},
"properties": {
"content": {
"type": "string",
"store": "no",
"indexAnalyzer": "ik",
"searchAnalyzer": "ik"
}
}
}
}'
查看分词效果,如下:
curl -XGET 'http://localhost:9200/index/_analyze?analyzer=ik' -d ‘你们有什么事情’
也就是说当我们在建立索引的时候,如果想使用我们自己的分词器就要先创建mapping。
网友评论