4

我正在索引来自世界各地但主要是泰国的消息。索引消息很可能包含英语或泰语。

有谁知道设置 ES 索引的最佳方法,以便它为泰语和英语搜索返回良好的搜索结果?

我试过使用这个设置:

{
    "settings": {
        "analysis" : {
            "analyzer" : {
                "default" : {
                    "type" : "cjk"
                }
            }
        }
    }
}

用泰语搜索时,cjk 分析器的结果不是很好。我实际上不知道为什么会这样,但非常感谢任何帮助!

4

2 回答 2

2

该分析器用于为中文日文cjk韩文生成二元组但不用于泰文。由于泰语是一种非空格语言,因此该分析器不会对句子进行标记。推荐用于泰语的分析器是分析器。thai

{
    "settings": {
        "analysis" : {
            "analyzer" : {
                "default" : {
                    "type" : "thai"
                }
            }
        }
    }
}

还有其他选项可以使用提供icu_tokenizer. 这个分词器支持泰语老挝语汉语日语韩语。您可以通过此链接找到插件:ICU 分析插件

安装插件后,您可以通过以下方式使用标记器:

{
    "settings": {
        "analysis" : {
            "analyzer" : {
                "default" : {
                    "type": "custom",
                    "tokenizer": "icu_tokenizer"
                }
            }
        }
    }
}
于 2016-03-17T09:48:49.043 回答
1

您可以按照以下说明实现自定义泰语分析器: http ://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-lang-analyzer.html#thai-analyzer

而且,为了让它更有用,还添加一个新的过滤器,以便org.apache.lucene.analysis.th.ThaiWordFilterFactory在 Apache Lucene 中使用,如下所示:

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

希望这对您有所帮助。

于 2014-08-23T09:13:03.997 回答