analysis-ik icon indicating copy to clipboard operation
analysis-ik copied to clipboard

6.7.2,”黎明前的黑暗“ 分词报错 startOffset must be non-negative, and endOffset must be >= startOffset

Open whitelowrie opened this issue 5 years ago • 11 comments

PUT /names
{
  "mappings": {
    "_doc": {
      "properties": {
         "name":{
          "type":"text",
          "analyzer" : "ik_max_word",
          "search_analyzer" : "ik_smart"
        }
      }
    }
  }
}

POST /names/_doc
{
  "name":"黎明前的黑暗"
}

报错:

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards startOffset=2,endOffset=3,lastStartOffset=3 for field 'name'"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards startOffset=2,endOffset=3,lastStartOffset=3 for field 'name'"
  },
  "status": 400
}

whitelowrie avatar May 17 '19 09:05 whitelowrie

ES 6.7.0 IK 6.7.0 【黎明前的黑暗】也出现错误

6.3.2 正常

heng0112 avatar May 17 '19 10:05 heng0112

@medcl 6.7.2同样的问题.

ik_smart正常,ik_max_word报错。Please have a look!

evan-wu avatar May 23 '19 01:05 evan-wu

我好像知道问题是怎么回事了。

GET _analyze?pretty
{
  "analyzer": "ik_max_word",
  "text": "黎明前的黑暗"
}

结果:

{
  "tokens" : [
    {
      "token" : "黎明前的黑暗",
      "start_offset" : 0,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 0
    },
    {
      "token" : "黎明前",
      "start_offset" : 0,
      "end_offset" : 3,
      "type" : "CN_WORD",
      "position" : 1
    },
    {
      "token" : "黎明",
      "start_offset" : 0,
      "end_offset" : 2,
      "type" : "CN_WORD",
      "position" : 2
    },
    {
      "token" : "的",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 3
    },
    {
      "token" : "前",
      "start_offset" : 2,
      "end_offset" : 3,
      "type" : "CN_CHAR",
      "position" : 4
    },
    {
      "token" : "的",
      "start_offset" : 3,
      "end_offset" : 4,
      "type" : "CN_CHAR",
      "position" : 5
    },
    {
      "token" : "黑暗",
      "start_offset" : 4,
      "end_offset" : 6,
      "type" : "CN_WORD",
      "position" : 6
    }
  ]
}

里面有两个"的"。

tcluzhe avatar Jun 26 '19 12:06 tcluzhe

emmm,怎么这么多重复的issue.. https://github.com/medcl/elasticsearch-analysis-ik/issues/652#issuecomment-477600224

tcluzhe avatar Jun 26 '19 13:06 tcluzhe

请问6.5.0版本也遇到这个问题了,如何解决呢?

llnjava avatar Jul 09 '19 09:07 llnjava

请问6.5.0版本也遇到这个问题了,如何解决呢?

@llnjava 我是换了新的插件,https://github.com/sing1ee/elasticsearch-jieba-plugin 注意一下版本的问题:https://github.com/sing1ee/elasticsearch-jieba-plugin/issues/37

tcluzhe avatar Jul 12 '19 07:07 tcluzhe

版本6.6.1不存在这个问题,可以通过修改配置文件plugin-descriptor.properties中的版本参数,来适配所用的Elasticsearch版本。

quxinyong avatar Jul 17 '19 08:07 quxinyong

版本6.6.1不存在这个问题,可以通过修改配置文件plugin-descriptor.properties中的版本参数,来适配所用的Elasticsearch版本。

能说清楚点吗。。。 【版本6.6.1不存在这个问题】 是ES版本,还是plugin版本? 【修改配置文件plugin-descriptor.properties中的版本参数】修改es的版本参数,还是plugin的?

zhuxiuwei avatar Oct 11 '19 08:10 zhuxiuwei

@zhuxiuwei ,在 Elasticsearch 6.x所有版本中,你都可以使用插件:elasticsearch-analysis-ik-6.6.1.zip(手动解压到 es 的 plugins 目录中),并修改配置文件plugin-descriptor.properties中的版本参数,来适配所用的Elasticsearch版本。若还有疑问,请打开链接扫码加微信,当面聊

quxinyong avatar Oct 30 '19 03:10 quxinyong

这个问题,是因为后面的词的startoffset大于前面的startoffset导致的。只需要解决分词结果中每个词的startoffset按照顺序产生就没问题了,一般是分词器的bug。

SenLeeLee avatar Oct 13 '22 11:10 SenLeeLee

这个bug 在 6.8.23 中还是会出现,ServerError: Type: illegal_argument_exception Reason: "startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards startOffset=27,endOffset=28,lastStartOffset=28 for field 'Subtitle'"

zdlian avatar Jul 15 '24 06:07 zdlian