不为失败找理由,要为成功找方法。

ES可不可以在一个字段中指定多个分词器

Elasticsearch | 作者 yeziblo | 发布于2019年08月09日 | 阅读数:1195

使用_all字段进行全文检索的时候,发现结果有时候很奇怪…我的分词器是ik_max_word,但是对于这个分词器,会把一些非中文的数据切的乱七八糟……比如一个34asdasqweqw的id字段,本身不需要切分,却胡乱切成了34、a、s、d、…这样如果我要搜索34的时候,就会错误的把这条id也给搜出来orz
 
而如果设置标准分词器的话,中文的切分也会很乱……
 
所以想求教下各位伙伴,针对我这种使用_all字段进行全文检索的情况,有没有什么办法,比如通过设置多个分词器,让ES可以稍微灵活的处理不同风格的数据呢(比如中文就中文分词,英文或者数字就标准分词)…
 
或者有没有伙伴能给点其他思路呢……
 
感谢你们,预祝周末愉快~
已邀请:
匿名用户

匿名用户

赞同来自: yeziblo

试试使用multi_match,每个字段单独设定一个分词器,但是问题是查询效率会降低。如果数据量不是很大,采用这个方法是可以的

God_lockin

赞同来自: yeziblo

multi-fields可以的,但是不是每一个版本都支持就是,在搜索的时候可以指定最大match、分数相加之类的策略,默认好像是分数相加。给你个参考如下。
{
"name":{
"type":"text",
"fields":{
"text":{
"search_analyzer":"ik_smart",
"analyzer":"ik_max_word",
"type":"text",
"index_options":"offsets"
},
"keyword":{
"type":"keyword"
}
}
}
}

ridethewind

赞同来自:

id字段本身不需要分词
---那么id字段应该设置为keyword

doom

赞同来自:

可以呀,fields里面可以设置多个分词策略;
 "title": {
"type": "text",
"analyzer": "ikSearchAnalyzer",
"fields": {
"spy": {
"type": "text",
"analyzer": "pinyiSimpleIndexAnalyzer"
},
"standard": {
"type": "text",
"analyzer": "standard"
},
"fpy": {
"type": "text",
"analyzer": "pinyiFullIndexAnalyzer"
},
"sort": {
"type": "icu_collation_keyword",
"index": false,
"language": "zh",
"country": "CN"
}
}
},

YangLingQiang - 90后

赞同来自:

我想问问, 这个问题是否解决了呢?

要回复问题请先登录注册