带有split_on_numerics的word_delimiter将删除所有标记

i_l*_*hos 3 tokenize elasticsearch

分析时alpha 1a beta,我想要令牌的结果[alpha 1 a beta].为什么myAnalyzer不做这个伎俩?

POST myindex
{
  "settings" : {
    "analysis" : {
      "analyzer" : {
        "myAnalyzer" : {
          "type" : "custom",
          "tokenizer" : "standard",
          "filter" : [ "split_on_numerics" ]
        }
      },
      "filter" : {
        "split_on_numerics" : {
          "type" : "word_delimiter",
          "split_on_numerics" : true,
          "split_on_case_change" : false,
          "generate_word_parts" : false,
          "generate_number_parts" : false,
          "catenate_all" : false
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我跑的时候

GET /myindex/_analyze?analyzer=myAnalyzer&text=alpha 1a beta
Run Code Online (Sandbox Code Playgroud)

没有令牌返回.再次,为什么?

kee*_*ety 8

要在自定义单词定界符过滤器中实现此目的,需要设置"generate_word_parts" : true"generate_number_parts" : true.

这基本上确保了分割时的"字母数字标记"应该生成其数字和单词部分.

示例过滤器如下:

{
  "settings" : {
    "analysis" : {
      "analyzer" : {
        "myAnalyzer" : {
          "type" : "custom",
          "tokenizer" : "standard",
          "filter" : [ "split_on_numerics" ]
        }
      },
      "filter" : {
        "split_on_numerics" : {
          "type" : "word_delimiter",
          "split_on_numerics" : true,
          "split_on_case_change" : false,
          "generate_word_parts" : true,
          "generate_number_parts" : true,
          "catenate_all" : false
        }
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望将原始术语 "1a"编入索引,则需要进行设置

preserve_original : true
Run Code Online (Sandbox Code Playgroud)

被索引一个