愚者求师之过,智者从师之长。

如何为_all指定字段采用不同分词,例如A字段不分词,B字段采用ik_max_word

Elasticsearch | 作者 lz8086 | 发布于2017年08月08日 | 阅读数:3540

如题,然后在query_string 或 match 全文匹配时,为提高搜准率和搜全率,有哪些注意地方呢?还望不吝指教,谢谢!
已邀请:

方磊 - elasticsearch

赞同来自:

在设置mapping的时候可以为不同的字段设置不同的分析器的

lz8086 - es小司机

赞同来自:

可能没说明白  ,由于要全文检索,搜索字段不定,所以用到了_all字段,
1、但不太清楚_all字段默认的分词器是什么?
2、还有如果_all字段中,有些字段不需要分词,有些字段需要分词又该怎么设置
 
mapping中各字段的analyzer与_all是没关系的

kennywu76 - Wood

赞同来自:

_all字段是将所有字段的内容链接在一起,做为一个大的字符串索引,包含在_all字段里的数据已经分不出A或者B字段,也就无法分别指定分词器,因此使用_all的目的一般是需要跨所有字段搜索。  
 
_all字段的analyzer可以用以下格式设置,需要注意_all是个特殊字段,必须设置在mapping的root level,不要设置在"properties"内部。
PUT /test/_mapping/type1
{
"_all": {
"search_analyzer": "standard",
"analyzer": "english"
},
"properties": {
"tag": {
"type": "keyword"
}
}
}

 

sma - 90后IT

赞同来自:

_all 内部应该不区分A,B字段吧,对于它来说都是_all字段,只不过是_all的值来至于其他字段(如A,B),然后按照_all自己的分词器进行分词,当然你也可以指定其分词器,所以应该无法实现来自不同字段的不同分词方式;
PS: 你可以考虑用另一个字段去存放这些词,把值放进去之前根据不同字段按照不同的方式进行分词,如原有A(分词器A),B(分词器B)字段,
新建C字段,C字段不分词,而C字段的值是 A字段的值按照分词器A分词 + B字段的值按照分词器B分词.这样可以实现不同字段不同的分词方式存入同一个字段,
不过感觉这样好复杂.......

要回复问题请先登录注册