【问题标题】:word_delimiter with split_on_numerics removes all tokens带有 split_on_numerics 的 word_delimiter 删除所有标记
【发布时间】:2015-05-16 21:22:07
【问题描述】:

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

不返回任何令牌。再说一遍,为什么?

【问题讨论】:

    标签: elasticsearch tokenize


    【解决方案1】:

    要在自定义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
    

    被索引一个

    【讨论】:

    • 像魅力一样工作..谢谢
    猜你喜欢
    • 2019-07-04
    • 2017-02-02
    • 1970-01-01
    • 2023-03-02
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多