word_delimiter 和 split_on_numerics 删除所有标记

word_delimiter with split_on_numerics removes all tokens

在分析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
        }
      }
    }
  }
}

现在当我运行

GET /myindex/_analyze?analyzer=myAnalyzer&text=alpha 1a beta

未返回任何令牌。再一次,为什么?

要在自定义 word-delimiter 过滤器中实现这一点,需要设置 "generate_word_parts" : true"generate_number_parts" : true

这基本上确保 "alphanumeric token" 在拆分时应该生成其数字和单词部分。

示例过滤器如下:

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

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

preserve_original : true

被索引一个