Elasticsearch synonym_graph过滤器未生成全部期望分词求助
解决synonym_graph过滤器未生成全部预期同义词的问题
我明白你遇到的困扰了——输入"responsis"后,你期望得到responsis、one、market和1四个分词,但目前只生成了前三个,缺了1。这背后的原因和synonym_graph过滤器的处理逻辑有关,我来帮你拆解并解决:
问题根源
你的同义词规则分成了两组:
- 第一组:
one market,responsis(把responsis映射为多词同义词one market) - 第二组:
one,1(把one和1互为同义词)
但单个synonym_graph过滤器只会对原始输入的token做一轮同义词匹配,不会对自己生成的同义词(比如这里的one)再应用一遍所有规则。所以当responsis被转换成one和market后,one并不会触发第二组规则生成1。
解决方案
要实现链式的同义词转换,同时满足你“不把同义词放同一组”的要求,你可以把同义词处理拆成两个独立的synonym_graph过滤器:第一个处理responsis和one market的映射,第二个专门处理one和1的映射。这样第二个过滤器会把第一个过滤器生成的one进一步转换成1。
修改后的curl命令如下:
curl -X GET "localhost:9200/_analyze?pretty" -H 'Content-Type: application/json' -d' { "tokenizer": "whitespace", "filter": [ { "type": "synonym_graph", "lenient": true, "synonyms": [ "one market,responsis" ] }, { "type": "synonym_graph", "lenient": true, "synonyms": [ "one,1" ] } ], "text": "responsis" }'
执行这个命令后,你会得到预期的四个分词:responsis、one、market和1。
补充说明
如果之后需要扩展更多同义词规则,都可以按照这个思路,把不同组的同义词放在独立的synonym_graph过滤器中,确保每一轮生成的同义词都能被后续过滤器处理。
内容的提问来源于stack exchange,提问作者Dhirendra Saw
相关产品推荐
相关产品推荐

