Неверное правило синонима при использовании двух файлов - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть два файла синонимов с несколькими тысячами строк, вот пример, вызывающий проблему:

en_synonyms файл:

cereal, semolina, wheat

fr_synonyms файл:

ble, cereale, wheat

Это ошибка, которую я получил:

{
  "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: wheat analyzed to a token (cereal) with position increment != 1 (got: 0)"
      }
    }
  },
  "status": 400
}

Отображение, которое я использовал:

PUT wheat_syn
{
  "mappings": {
    "wheat": {
      "properties": {
        "description": {
          "type": "text",
          "fields": {
            "synonyms": {
              "type": "text",
              "analyzer": "syn_text"
            },
            "keyword": {
             "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  },
  "settings": {
    "number_of_shards": 1,
    "analysis": {
      "filter": {
        "en_synonyms": {
          "type": "synonym",
          "tokenizer": "keyword",
          "synonyms_path" : "analysis/en_synonyms.txt"
        },
        "fr_synonyms": {
          "type": "synonym",
          "tokenizer": "keyword",
          "synonyms_path" : "analysis/fr_synonyms.txt"
        }
      },
      "analyzer": {
        "syn_text": {
          "tokenizer": "standard",
          "filter": ["lowercase", "en_synonyms", "fr_synonyms" ]
        }
      }
    }
  }
}

Оба файла содержат термин wheat, когда я удаляю его из одного изих, индекс создан успешно.

Я думал о объединении двух файлов, поэтому результат будет:

cereal, semolina, wheat, ble, cereale

Но в моем случае я не могу сделать это вручную, так как онзаймет много времени (я буду искать способ сделать это программно, в зависимости от ответа на этот вопрос)

1 Ответ

0 голосов
/ 05 декабря 2018

Нашел простое решение:

Вместо использования двух файлов я просто объединил содержимое en_synonyms и fr_synonyms в один файл all_synonyms:

cereal, semolina, wheat
ble, cereale, wheat

Тогдаиспользовал его для картирования.

...