Elasticsearch中edge_ngram配置custom_token_chars不生效问题
问题原因
配置格式错了。edge_ngram分词器的custom_token_chars参数不支持数组类型传值,合法的传值类型是字符串,需要把要额外放行的特殊字符直接拼接成一个字符串传入。你现在把!放在数组里传参,ES识别到参数类型不匹配会直接忽略这条无效配置,导致!根本没被加入合法分词字符集,分词时会被当做词间分隔符直接丢弃。
另外你设置的min_gram为2,就算配置修正后,单独出现的长度为1的!也不会生成独立token,但它会作为词的起始部分参与n-gram切分。
修复方法
把tokenizer配置里custom_token_chars的传值从数组改成字符串就行,修正后的完整索引配置如下:
PUT test-ngrams { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer" } }, "tokenizer": { "my_tokenizer": { "type": "edge_ngram", "min_gram": 2, "max_gram": 10, "token_chars": [ "letter", "digit" ], "custom_token_chars" : "!" } } } } }
删除原有错误索引,用上面的配置重新创建后再测试分词,!Quick段就会正常切出!Q、!Qu、!Qui这类包含!的token,符合预期。
如果需要同时放行多个自定义特殊字符,直接把所有字符拼在同一个字符串里即可,比如要同时支持!和#,直接写"custom_token_chars": "!#"就行,不用拆成数组。
内容的提问来源于stack exchange,提问作者Avi
相关产品推荐
相关产品推荐

