ES6.2.3 synonym filter error

synonymの定義を外部ファイルから読み込ませてIndexを作成しようとしているのですが、エラーが生じます。
原因特定の為、以下のようなシンプルな定義を作成してIndexの作成を実行したのですが、エラーが再現しました。何が原因でエラーが発生するのか、回避方法をどうすればよいのかがわかりません。
何かご存知でしたら教えて頂けないでしょうか。

■定義ファイル

{
  "settings": {
    "index": {
      "number_of_shards": "3",
      "number_of_replicas": "1",
      "analysis": {
        "tokenizer": {
          "kuromoji": {
            "type": "kuromoji_tokenizer"
          }
        },
        "filter": {
          "synonym": {
            "type": "synonym",
            "synonyms": [
              "ダイレクトバンキング=>ネットバンキング"
            ]
          }
        },
        "analyzer": {
          "kuromoji_analyzer": {
            "type": "custom",
            "tokenizer": "kuromoji",
            "filter": [
              "synonym"
            ]
          }
        }
      }
    }
  }
}

■確認しているエラーメッセージ

{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "failed to build synonyms"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "failed to build synonyms",
    "caused_by": {
      "type": "parse_exception",
      "reason": "Invalid synonym rule at line 1",
      "caused_by": {
        "type": "illegal_argument_exception",
        "reason": "term: ダイレクトバンキング analyzed to a token (ダイレクトバンキング) with position increment != 1 (got: 0)"
      }
    }
  },
  "status": 400
}

「 "バンキング=>ネットバンキング"」 ・・では、正常にIndexが作成されました。

「error_trace=true」パラメータを使用してログを確認してみたのと、

"stack_trace": "[[xxxxx.localdomain][xxxxx:9300][indices:admin/create]]; nested: RemoteTransportException[[xxxxx.localdomain][xxxxx:9300][indices:admin/create]]; nested: IllegalArgumentException[failed to build synonyms]; nested: NotSerializableExceptionWrapper[parse_exception: Invalid synonym rule at line 1]; nested: IllegalArgumentException[term: ダイレクトバンキング analyzed to a token (ダイレクトバンキング) with position increment != 1 (got: 0)]; at org.elasticsearch.ElasticsearchException.guessRootCauses(ElasticsearchException.java:619) at org.elasticsearch.ElasticsearchException.generateFailureXContent(ElasticsearchException.java:564) at ...

kuromojiで、「ダイレクトバンキング」を「analyze」しました結果です。

{
  "tokens": [
    {
      "token": "ダイレクト",
      "start_offset": 0,
      "end_offset": 5,
      "type": "word",
      "position": 0
    },
    {
      "token": "ダイレクトバンキング",
      "start_offset": 0,
      "end_offset": 10,
      "type": "word",
      "position": 0,
      "positionLength": 2
    },
    {
      "token": "バンキング",
      "start_offset": 5,
      "end_offset": 10,
      "type": "word",
      "position": 1
    }
  ]
}

tokenizerは、デフォルトのSEARCHなのですが、Analyze結果に同じものが取得されているのが原因?でしょうか。これは正常な挙動??
「NORMAL」「EXTENDED」モードではエラーなく、Indexが作成されました。

で、どうするかなんですが、モードを変えるとAnalyze結果が大きく変わってしまうと思うので、辞書ファイルにSynonymと同じ単語を登録して回避できないかを後日試してみようかと思います。

他に良い方法があればナレッジ頂けると嬉しいです。

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.