前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IK分词结果不符合预期如何处理

IK分词结果不符合预期如何处理

原创
作者头像
zjiekou
发布2024-01-04 17:14:21
2120
发布2024-01-04 17:14:21
举报
文章被收录于专栏:大数据zjiekou

问题背景:

集美中转场搜不到,集美可以搜到

测试步骤:

代码语言:rest
复制
DELETE test22

PUT test22
{
  "mappings": {
    "properties": {
      "locationName": {
        "type": "text",
        "fields": {
          "raw":{
            "type": "keyword",
            "ignore_above": 256
          }
          },
        "analyzer": "ik_max_word",
        "search_analyzer": "ik_smart"
      }
    }
  }
}

GET test22/_analyze
{
  "text": "集美中转场",
  "tokenizer": "ik_max_word"
}


POST test22/_doc
{
  "locationName": "集美中转场"
}


GET test22/_search
{
  "query": {
    "match_phrase": {
      "locationName": "集美中转场"
    }
  }
}

排查复现:

profile分析看词元是包含集美中转场的

自定义词典中也加的有中转场和集美

测试词典中加集美中转场完整的词,是可以查询到的

但客户业务使用场景会有特别多的中转场查询需求,一个一个加词典不太现实,该如何处理?

原因分析:

一般查不出来就是因为里面有词对不上,因为match phase 的分词后是AND查询。测试数据就是 集美中转场,查询关键字也是 集美中转场,完全匹配上的

看起来跟这些词的顺序还有关系,match phrase 有顺序要求

从profile 看根因是

locationName:\"集美 中转场\" (smart 分词结果) 无法匹配 "locationName:\"集美 美中 中转场 中转 转场\""(max 分词结果)

因为(max 分词结果) 在 "集美 中转场\" 中间多了一个" 美中 "

加了slop:1 后,就允许(smart 分词结果)可以进行偏移,匹配方式变成 :\"集美 XXXX(1个偏移) 中转场\"

解决方案:

1.match_phrase查询时指定和analyzer一样的分词器就可以匹配到

2.使用match的方式,operator指定为AND,但是这种方式可能会多查到一些数据

比如 集美广州中转场 这种也会命中,因为match是无序的,只要ik_max_word中分出来的词包含查询语句中分出来的词就会命中

3、可以通过slop 调大顺序的兼容性

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
Elasticsearch Service
腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档