Реализация множественного synonym_path для одного индекса в упругом поиске

Я пытаюсь добиться множественного synonym_path для одного индекса в эластичном поиске.

"settings": {
"index": {
  "analysis": {
    "analyzer": {
      "synonym": {
        "tokenizer": "whitespace",
        "filter": ["synonym"]
      }
    },
    "filter": {
      "bool": {
          "should": [{
            "synonym": {
              "type": "synonym",
              "synonyms_path": "synonyms.txt",
              "ignore_case": true
            }},
          {
            "synonym": {
              "type": "synonym",
              "synonyms_path": "synonyms2.txt",
              "ignore_case": true
          }}]
      }
    }
  }
}
},
  "mappings": {
    "animals": {
      "properties": {
        "name": {
          "type": "String",
          "analyzer": "synonym"
        }
      }
    }
  }

Я попробовал фрагмент выше, используя JSON Sense в Chrome, но он сгенерировал TokenFilter [bool] must have a type associated with it ошибка.

Есть ли другой способ реализовать это?

1 ответ

Решение

filter раздел в analysis раздел должен содержать не Query DSL, а определения токена-фильтра.

В вашем случае вам нужно заново создать индекс со следующими настройками:

{
  "settings": {
    "index": {
      "analysis": {
        "analyzer": {
          "synonyms": {
            "tokenizer": "whitespace",
            "filter": [
              "synonym1",
              "synonym2"
            ]
          }
        },
        "filter": {
            "synonym1": {
              "type": "synonym",
              "synonyms_path": "synonyms.txt",
              "ignore_case": true
            },
            "synonym2": {
              "type": "synonym",
              "synonyms_path": "synonyms2.txt",
              "ignore_case": true
            }
        }
      }
    }
  },
  "mappings": {
    "animals": {
      "properties": {
        "name": {
          "type": "string",
          "analyzer": "synonyms"
        }
      }
    }
  }
}
Другие вопросы по тегам