1、ik+pinyin分词器
在之前的一篇文章中配置了IK分词器,在这里说一下怎么使elasticsearch可以同时使用两个分词器:主要是参考这位老哥的http://blog.csdn.net/napoay/article/details/53907921的做法。
这里还是主要使用sense,主要是kibana还没有搞清楚具体怎么使用
PUT /medcl/
{
"index": {
"analysis": {
"analyzer": {
"ik_pinyin_analyzer": {
"type": "custom",
"tokenizer": "ik_smart",
"filter": ["my_pinyin", "word_delimiter"]
}
},
"filter": {
"my_pinyin": {
"type": "pinyin",
"first_letter": "prefix",
"padding_char": " "
}
}
}
}
}
输入这些东西,稍微解释一下子:创建一个为medcl的index,然后自定义一个分词器analyzer叫做ik_pinyin_analyzer,使用的是ik_smart进行分词,然后添加两个过滤器,一个是自定义的my_pinyin,另一个是elasticsearch原本就有的word_delimiter,my_pinyin使用的就是拼音分词器过滤的。elasticsearch自带的过滤器有很多,http://blog.csdn.net/i6448038/article/details/50625397这篇博客中写的很详细。
然后建议一个type为folks的mapping,此时使用的就是刚刚自己定义的ik_pinyin_analyzer作为分词器。
POST /medcl/folks/_mapping
{
"folks": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"pinyin": {
"type": "text",
"store": "no",
"term_vector": "with_positions_offsets",
"analyzer": "ik_pinyin_analyzer"
}
}
}
}
}
}
往服务器中添加两条索引信息
POST /medcl/folks/andy
{
"name":["刘德华","刘邦"]}
POST /medcl/folks/tina
{
"name":"中华人民共和国国歌"}
测试一下是否可以被查询到
POST /medcl/folks/_search
{
"query": {
"match": {
"name.pinyin": "国歌"#改成zhonghua测试拼音的是否通过
}
},
"highlight": {
"fields": {
"*": {}
}
}
}
查询到的结果长这样子:
{
"took": 7,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 2.6638038,
"hits": [
{
"_index": "medcl",
"_type": "folks",
"_id": "tina",
"_score": 2.6638038,
"_source": {
"name": "中华人民共和国国歌"
},
"highlight": {
"name.pinyin": [
"<em>中华人民共和国</em><em>国歌</em>"
]
}
},
{
"_index": "medcl",
"