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

时间:2015-05-16 21:22:07

标签: elasticsearch tokenize

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

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

1 个答案:

答案 0 :(得分:8)

要在自定义word-delimiter过滤器中实现此目的,您需要设置"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
        }
      }
    }
  }
}

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

preserve_original : true

要编入索引