ElasticSearch lowercase token filter失效问题排查求助
ElasticSearch自定义分词器配置问题修正
你的问题出在自定义分析器没有绑定小写过滤器。虽然你在analysis下写了"filter" : ["lowercase"],但ElasticSearch不会自动将这个过滤器关联到my_analyzer上,必须在分析器的配置里明确声明要使用的过滤器。
修正后的索引配置如下:
PUT test-index { "settings": { "analysis": { "analyzer": { "my_analyzer": { "tokenizer": "my_tokenizer", "filter": ["lowercase"] // 这里添加过滤器绑定 } }, "tokenizer": { "my_tokenizer": { "type": "pattern", "pattern": "(?<!^)(?=[A-Z])" } } } } }
重新执行你的测试请求:
POST test-index/_analyze { "analyzer": "my_analyzer", "text": "SomeSideCar.jpg" }
就能得到你预期的分词结果:
{ "tokens": [ { "token": "some", "start_offset": 0, "end_offset": 4, "type": "word", "position": 0 }, { "token": "side", "start_offset": 4, "end_offset": 8, "type": "word", "position": 1 }, { "token": "car.jpg", "start_offset": 8, "end_offset": 15, "type": "word", "position": 2 } ] }
自定义分析器的执行逻辑是字符过滤器(可选)→ 分词器 → 令牌过滤器,你之前只指定了分词器,漏掉了把小写过滤器加入到分析器的执行链里,所以分词后的结果没有被转成小写。
内容的提问来源于stack exchange,提问作者cah1r
相关产品推荐
相关产品推荐

