

工厂搜索 依赖于关键词召回、没有做语义召回和精排，加上语义召回和精排则成本过高，所以对分词效果仍然很依赖。badcase： q=锦鸿 无法召回 锦鸿达
1. 虽然商品搜索已经不强依赖于分词效果，但是工厂搜索仍然对分词效果有很大依赖，所以进行了优化。
2. 优化内容：
  1) index_ik + 自定义词典（需要配置自定义词典。 不配置自定义词典的时候，index_ik分词结果和query_ik完全一致，配置自定义词典时，index_ik 将 ）
  2) ansj自定义词典 补充属性词





| Query   | IK_Smart 分词结果                            | IK_Max_Word 分词结果                              |
|---------|---------------------------------------------|--------------------------------------------------|
| 锦鸿达  | 锦, 鸿达                                   | 锦, 鸿达                                          |
| 锦鸿    | 锦, 鸿                                     | 锦, 鸿                                            |
| 14寸 4代 | 14寸, 4代                                 | 14, 寸, 4, 代                                     |
| q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公, 仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14, 寸, 第, 4, 代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 |
| 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套                | 金毛犬, 狗狗, 系列, 积木, 套                        |



| Query   | query_ik 分词结果                       | index_ik 分词结果                                |
|---------|------------------------------------------|--------------------------------------------------|
| 锦鸿达  | 锦, 鸿达                                 | 锦, 鸿达, 鸿, 达                                  |
| 锦鸿    | 锦鸿                                     | 锦鸿, 锦, 鸿                                      |
| q=14寸第4代-眼珠实身冰雪公仔带手动大推车,搪胶雪宝宝 | 14寸, 第, 4代, 眼珠, 实, 身, 冰雪, 公仔, 带, 手动, 大, 推车, 搪, 胶, 雪, 宝宝 | 14寸, 寸, 第, 4代, 代, 眼珠, 眼, 珠, 实, 身, 冰雪, 冰, 雪, 公仔, 公, 仔, 带, 手动, 手, 动, 大, 推车, 推, 车, 搪, 胶, 雪, 宝宝, 宝 |
| 金毛犬-狗狗系列积木套 | 金毛犬, 狗狗, 系列, 积木, 套                | 金毛犬, 金毛, 金, 毛, 犬, 狗狗, 狗, 系列, 系, 列, 积木, 积, 木, 套 |


ansj 插件自定义词典补充属性词后：
| Query   | query_ik 分词结果                       | index_ik 分词结果                                |
|---------|------------------------------------------|--------------------------------------------------|
| 锦鸿达  | 锦, 鸿达                                 | 锦, 鸿达, 鸿, 达                                  |
| 锦鸿    | 锦鸿                                     | 锦鸿, 锦, 鸿                                      |
| 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_ik不符合预期
index模式（type=index_ik）不符合预期 ：type=index_ik  type=query_ik 结果永远都是一样的。
https://github.com/NLPchina/elasticsearch-analysis-ansj/issues/235

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

### 2. 特殊符号分词粘连问题
特殊符号（减号）会跟后面的词粘连到一起，导致搜索减号后面的词，无法匹配：

```bash
GET /_cat/ansj?text=狗狗系列-柴犬积木&type=index_ik
{
"name": "-柴",
"nature": "nrf",
"offe": 4,
"realName": "-柴",
"synonyms": null
},

GET /_cat/ansj?text=狗狗系列-哈士奇犬&type=index_ik
{
"name": "-哈士奇",
"nature": "nrf",
"offe": 4,
"realName": "-哈士奇",
"synonyms": null
},
```

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

暂时解决办法是：
```json
        "analyzer": {
          "index_ik": {
            "type": "custom",
            "char_filter": ["hyphen_to_space"],
            "tokenizer": "index_ik"
          },
          "query_ik": {
            "type": "custom",
            "char_filter": ["hyphen_to_space"],
            "tokenizer": "query_ik"
          }
        }
```







