Blame view

docs/ES/ES_8.18/README__分词相关.md 5.44 KB
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"

            }

          }

  ```