當前位置:成語大全網 - 英語詞典 - ES IK拼音插件踩坑及填坑記錄

ES IK拼音插件踩坑及填坑記錄

最近在給es插入文檔的時候,忽然報錯,提示如下:

ElasticsearchException[Elasticsearch exception [type=illegal_argument_exception, reason=startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards startOffset=0,endOffset=3,lastStartOffset=3 for field 'title.pinyin']]

感覺是在用ik拼音分詞的時候報的錯。

並不是所有的文檔在插入的時候會報錯,只有在title字段包含特殊符號的時候會報錯,上網查了壹下原因,說是ik拼音插件的錯誤,只需要升級壹下插件的版本即可。

然而因為用的是阿裏雲的es服務,不能對插件進行升級,所以這個方法行不通。

也有說是因為,將參數“ignore_pinyin_offset”設置為false後,並向pinyin分詞字段批量寫入數據,即會出現“startOffset must be non-negative, and endOffset must be >= startOffset, and offsets must not go backwards”異常。所以將ignore_pinyin_offset設為true即可。

設置前的配置:

設置後的配置:

改完之後重新索引壹遍文件,結果還是報這個錯。

就這麽折騰了兩天之後,發現既然這是這個版本的本身的bug,然後阿裏雲那邊又不給升級版本,那為什麽不曲線救國呢?

前面壹開始排查的時候發現,是標題含有特殊符號的時候,才會出現這個bug,那麽可以在拼音分詞之前,再加壹個filter,把特殊符號過濾掉,自然就沒問題了。

於是我先配置了壹個filter:

然後再把這個filter配置到analyzer裏:

這樣,在用ik_pinyin_analyzer分詞之前,會先通過specialCharactersFilter的正則表達式過濾,把所有的特殊符號都過濾掉,然後再用my_pinyin進行拼音分詞。

這麽處理後,就不會出現上面出現的錯誤了。

註:上述配置都是個性化配置,得根據自己的習慣和要求來配置,不用照搬,只要是加個新建壹個filter然後加到pinyin前即可。