Blame view

docs/ES/ES_8.18/README__分词相关.md 5.4 KB
648cb4c2   tangwang   ES docs
1
2
3
4
5
  

  

  工厂搜索 依赖于关键词召回、没有做语义召回和精排,加上语义召回和精排则成本过高,所以对分词效果仍然很依赖。badcase: q=锦鸿 无法召回 锦鸿达

  1. 虽然商品搜索已经不强依赖于分词效果,但是工厂搜索仍然对分词效果有很大依赖,所以进行了优化。

  2. 优化内容:

30f2a10b   tangwang   ansj -> ik
6
    1) index_ik + 自定义词典(需要配置自定义词典。 不配置自定义词典的时候,index_ik分词结果和query_ik完全一致,配置自定义词典时,index_ik 将 )

648cb4c2   tangwang   ES docs
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    2) ansj自定义词典 补充属性词

  

  

  

  

  

  | Query   | IK_Smart 分词结果                            | IK_Max_Word 分词结果                              |

  |---------|---------------------------------------------|--------------------------------------------------|

  | 锦鸿达  | 锦, 鸿达                                   | 锦, 鸿达                                          |

  | 锦鸿    | 锦, 鸿                                     | 锦, 鸿                                            |

  | 14寸 4代 | 14寸, 4代                                 | 14, 寸, 4, 代                                     |

  | q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公, 仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14, 寸, 第, 4, 代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 |

  | 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套                | 金毛犬, 狗狗, 系列, 积木, 套                        |

  

  

  

30f2a10b   tangwang   ansj -> ik
23
  | Query   | query_ik 分词结果                       | index_ik 分词结果                                |

648cb4c2   tangwang   ES docs
24
25
26
27
28
29
30
31
  |---------|------------------------------------------|--------------------------------------------------|

  | 锦鸿达  | 锦, 鸿达                                 | 锦, 鸿达, 鸿, 达                                  |

  | 锦鸿    | 锦鸿                                     | 锦鸿, 锦, 鸿                                      |

  | q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14寸, 寸, 第, 4代, 代, 眼珠, 眼, 珠, 实, 身, 冰雪, 冰, 雪, 公仔, 公, 仔, 带, 手动, 手, 动, 大, 推车, 推, 车, 搪, 胶, 雪, 宝宝, 宝 |

  | 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套                | 金毛犬, 金毛, 金, 毛, 犬, 狗狗, 狗, 系列, 系, 列, 积木, 积, 木, 套 |

  

  

  ansj 插件自定义词典补充属性词后:

30f2a10b   tangwang   ansj -> ik
32
  | Query   | query_ik 分词结果                       | index_ik 分词结果                                |

648cb4c2   tangwang   ES docs
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
  |---------|------------------------------------------|--------------------------------------------------|

  | 锦鸿达  | 锦, 鸿达                                 | 锦, 鸿达, 鸿, 达                                  |

  | 锦鸿    | 锦鸿                                     | 锦鸿, 锦, 鸿                                      |

  | 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分词器的问题:

  

30f2a10b   tangwang   ansj -> ik
68
69
  ### 1. index_ik不符合预期

  index模式(type=index_ik)不符合预期 :type=index_ik  type=query_ik 结果永远都是一样的。

648cb4c2   tangwang   ES docs
70
71
72
73
74
75
76
77
  https://github.com/NLPchina/elasticsearch-analysis-ansj/issues/235

  

  已解决:需要配置自定义词典

  

  ### 2. 特殊符号分词粘连问题

  特殊符号(减号)会跟后面的词粘连到一起,导致搜索减号后面的词,无法匹配:

  

  ```bash

30f2a10b   tangwang   ansj -> ik
78
  GET /_cat/ansj?text=狗狗系列-柴犬积木&type=index_ik

648cb4c2   tangwang   ES docs
79
80
81
82
83
84
85
86
  {

  "name": "-柴",

  "nature": "nrf",

  "offe": 4,

  "realName": "-柴",

  "synonyms": null

  },

  

30f2a10b   tangwang   ansj -> ik
87
  GET /_cat/ansj?text=狗狗系列-哈士奇犬&type=index_ik

648cb4c2   tangwang   ES docs
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  {

  "name": "-哈士奇",

  "nature": "nrf",

  "offe": 4,

  "realName": "-哈士奇",

  "synonyms": null

  },

  ```

  

  这样的话,如果搜索“柴犬”、“哈士奇”,就不能命中上面的句子。

  

  暂时解决办法是:

  ```json

          "analyzer": {

30f2a10b   tangwang   ansj -> ik
102
            "index_ik": {

648cb4c2   tangwang   ES docs
103
104
              "type": "custom",

              "char_filter": ["hyphen_to_space"],

30f2a10b   tangwang   ansj -> ik
105
              "tokenizer": "index_ik"

648cb4c2   tangwang   ES docs
106
            },

30f2a10b   tangwang   ansj -> ik
107
            "query_ik": {

648cb4c2   tangwang   ES docs
108
109
              "type": "custom",

              "char_filter": ["hyphen_to_space"],

30f2a10b   tangwang   ansj -> ik
110
              "tokenizer": "query_ik"

648cb4c2   tangwang   ES docs
111
112
113
114
115
116
117
118
119
120
            }

          }

  ```