648cb4c2
tangwang
ES docs
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
工厂搜索 依赖于关键词召回、没有做语义召回和精排,加上语义召回和精排则成本过高,所以对分词效果仍然很依赖。badcase: q=锦鸿 无法召回 锦鸿达
1. 虽然商品搜索已经不强依赖于分词效果,但是工厂搜索仍然对分词效果有很大依赖,所以进行了优化。
2. 优化内容:
1) index_ansj + 自定义词典(需要配置自定义词典。 不配置自定义词典的时候,index_ansj分词结果和query_ansj完全一致,配置自定义词典时,index_ansj 将 )
2) ansj自定义词典 补充属性词
| Query | IK_Smart 分词结果 | IK_Max_Word 分词结果 |
|---------|---------------------------------------------|--------------------------------------------------|
| 锦鸿达 | 锦, 鸿达 | 锦, 鸿达 |
| 锦鸿 | 锦, 鸿 | 锦, 鸿 |
| 14寸 4代 | 14寸, 4代 | 14, 寸, 4, 代 |
| q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公, 仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14, 寸, 第, 4, 代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 |
| 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套 | 金毛犬, 狗狗, 系列, 积木, 套 |
| Query | query_ansj 分词结果 | index_ansj 分词结果 |
|---------|------------------------------------------|--------------------------------------------------|
| 锦鸿达 | 锦, 鸿达 | 锦, 鸿达, 鸿, 达 |
| 锦鸿 | 锦鸿 | 锦鸿, 锦, 鸿 |
| q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14寸, 寸, 第, 4代, 代, 眼珠, 眼, 珠, 实, 身, 冰雪, 冰, 雪, 公仔, 公, 仔, 带, 手动, 手, 动, 大, 推车, 推, 车, 搪, 胶, 雪, 宝宝, 宝 |
| 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套 | 金毛犬, 金毛, 金, 毛, 犬, 狗狗, 狗, 系列, 系, 列, 积木, 积, 木, 套 |
ansj 插件自定义词典补充属性词后:
| Query | query_ansj 分词结果 | index_ansj 分词结果 |
|---------|------------------------------------------|--------------------------------------------------|
| 锦鸿达 | 锦, 鸿达 | 锦, 鸿达, 鸿, 达 |
| 锦鸿 | 锦鸿 | 锦鸿, 锦, 鸿 |
| q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪胶, 雪, 宝宝 | 14寸, 寸, 第, 4代, 代, 眼珠, 眼, 珠, 实身, 实, 身, 冰雪, 冰, 雪, 公仔, 公, 仔, 带, 手动, 手, 动, 大, 推车, 推, 车, 搪胶, 搪, 胶, 雪, 宝宝, 宝 |
| 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套 | 金毛犬, 金毛, 金, 毛, 犬, 狗狗, 狗, 系列, 系, 列, 积木, 积, 木, 套 |
## ik分词器的问题:
```bash
POST spu/_analyze
{
"analyzer": "ik_smart",
"text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}
POST spu/_analyze
{
"analyzer": "ik_max_word",
"text": "14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝"
}
# ik分词器的问题:
# ik_max_word 结果是: 14 寸 第 4 代
# 期望是能分出多种形式: 14 寸 14寸 第 4 代 4代
# ik_smart
# 结果是: 14寸 第 4代
# 因此 14寸 4代 都无法召回原始文档。
```
## ansj分词器的问题:
### 1. index_ansj不符合预期
index模式(type=index_ansj)不符合预期 :type=index_ansj type=query_ansj 结果永远都是一样的。
https://github.com/NLPchina/elasticsearch-analysis-ansj/issues/235
已解决:需要配置自定义词典
### 2. 特殊符号分词粘连问题
特殊符号(减号)会跟后面的词粘连到一起,导致搜索减号后面的词,无法匹配:
```bash
GET /_cat/ansj?text=狗狗系列-柴犬积木&type=index_ansj
{
"name": "-柴",
"nature": "nrf",
"offe": 4,
"realName": "-柴",
"synonyms": null
},
GET /_cat/ansj?text=狗狗系列-哈士奇犬&type=index_ansj
{
"name": "-哈士奇",
"nature": "nrf",
"offe": 4,
"realName": "-哈士奇",
"synonyms": null
},
```
这样的话,如果搜索“柴犬”、“哈士奇”,就不能命中上面的句子。
暂时解决办法是:
```json
"analyzer": {
"index_ansj": {
"type": "custom",
"char_filter": ["hyphen_to_space"],
"tokenizer": "index_ansj"
},
"query_ansj": {
"type": "custom",
"char_filter": ["hyphen_to_space"],
"tokenizer": "query_ansj"
}
}
```
|