在弹性搜索中为单个索引实现多个 synonym_path

Implementing multiple synonym_path for single index in elastic search

我正在尝试在 elasticsearch 中为单个索引实现多个 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"
        }
      }
    }
  }

我在 Chrome 中使用 JSON Sense 尝试了上面的代码片段,但它产生了 TokenFilter [bool] must have a type associated with it 错误。

还有其他实现方式吗?

analysis 部分中的 filter 部分不包含查询 DSL,而是包含 token filter 定义。

对于您的情况,您需要使用以下设置重新创建索引:

{
  "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"
        }
      }
    }
  }
}