多语言 ElasticSearch 支持
Posted
技术标签:
【中文标题】多语言 ElasticSearch 支持【英文标题】:Multi-Language ElasticSearch Support 【发布时间】:2014-03-09 19:13:45 【问题描述】:我正在索引来自世界各地但主要是泰国的消息。索引消息很可能包含英语或泰语。
有谁知道设置 ES 索引的最佳方法,以便它为泰语和英语搜索返回良好的搜索结果?
我已尝试使用此设置:
"settings":
"analysis" :
"analyzer" :
"default" :
"type" : "cjk"
用泰语搜索时,cjk 分析器的结果不是很好。我实际上不知道为什么会这样,但非常感谢任何帮助!
【问题讨论】:
【参考方案1】:cjk
分析器用于为 中文、日文 和 韩文 生成二元组,但不用于泰文。由于泰语是一种非空格语言,因此该分析器不会对句子进行标记。推荐用于泰语的分析器是thai
分析器。
"settings":
"analysis" :
"analyzer" :
"default" :
"type" : "thai"
还有其他选项可以使用提供icu_tokenizer
的ICU 分析插件 分析泰语数据。此标记器支持泰语、老挝、中文、日文和韩文语言。你可以通过这个链接找到插件:ICU Analysis Plugin
安装插件后,您可以通过这种方式使用分词器:
"settings":
"analysis" :
"analyzer" :
"default" :
"type": "custom",
"tokenizer": "icu_tokenizer"
【讨论】:
第二种方法(ICU tokenizer)似乎对我有用。谢谢!【参考方案2】:您可以实现自定义泰语分析器,如下所述: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#thai-analyzer
而且,为了让它更有用,还添加一个新过滤器,以便使用 Apache Lucene 中的 org.apache.lucene.analysis.th.ThaiWordFilterFactory
,方法如下:
curl -X PUT http://localhost:9200/test -d '
"settings":
"analysis":
"analyzer":
"default":
"type":"custom",
"tokenizer":"standard",
"filters":[ "standard","thai","lowercase", "stop", "kstem" ]
,
"filter":
"thai":
"type": "org.apache.lucene.analysis.th.ThaiWordFilterFactory"
’
然后,你可以测试:
http://localhost:9200/test/_analyze?analyzer=thai&text=สวัสดี+hello
希望对你有所帮助。
【讨论】:
以上是关于多语言 ElasticSearch 支持的主要内容,如果未能解决你的问题,请参考以下文章
「GoCN酷Go推荐」Go高性能多语言NLP和分词库——gse