如何在 elasticsearch 的设置中声明多个分词器

How to declare more than one tokenizer in settings for elasticsearch

我想创建一个 属性 的搜索索引,我希望其结果按以下顺序排列:

  1. 首先是所有以搜索词
  2. 开头的结果
  3. 然后所有包含搜索词的结果

所以为此,我想使用 https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

但我的索引设置中已经有分词器 kuromoji_tokenizer

那么我如何在设置中添加另一个分词器(然后在分析器中使用它),以便我可以完成上面的场景?

因此,例如在下面的 json 中,我可以向 tokenzier 添加另一个子项还是 tokenzier 需要是一个数组?

"settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        }
      }
    }
  }

我相信你可以,是的。只需将它添加到第一个旁边,不要创建数组,只需给它另一个名称(在我的示例中我称之为 "my_other_tokenizer"):

"settings": {
    "analysis": {
      "analyzer": {
        "autocomplete": {
          "tokenizer": "autocomplete",
          "filter": [
            "lowercase"
          ]
        },
        "autocomplete_search": {
          "tokenizer": "lowercase"
        }
      },
      "tokenizer": {
        "autocomplete": {
          "type": "edge_ngram",
          "min_gram": 2,
          "max_gram": 10,
          "token_chars": [
            "letter"
          ]
        },
        "my_other_tokenizer": {
          "type": "kuromoji_tokenizer",
          "mode": "extended",
          "discard_punctuation": "false",
          "user_dictionary": "userdict_ja.txt"
        }
      }
    }
  }

然后在您的分析器设置中使用它,就像您对第一个分词器所做的那样。