如何在elasticsearch的设置中声明多个tokenizer

时间:2017-02-28 15:48:29

标签: elasticsearch tokenize

我想创建一个搜索索引,其中包含一个属性,我想按照以下顺序获得结果:

  1. 首先以搜索词
  2. 开头的所有结果
  3. 然后包含搜索词的所有结果
  4. 所以为此,我想使用https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-edgengram-tokenizer.html

    但我的索引设置中已经有一个tokenizer kuromoji_tokenizer

    那么如何在设置中添加另一个标记器(以后再在分析器中使用它),以便我可以完成以上的scneario?

    所以例如在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"
              ]
            }
          }
        }
      }
    

1 个答案:

答案 0 :(得分:1)

我相信你可以,是的。只需将它添加到第一个旁边,不要创建数组,只需给它另一个名称(在我的例子中我称之为“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"
        }
      }
    }
  }

然后在分析仪设置中使用它,就像您对第一个标记器一样。