elasticsearch - 多语言Elasticsearch索引

标签 elasticsearch multilingual analyzer stop-words stemming

我正在用不同的语言为一堆文档建立索引,据我了解,我可以使用_analyzer映射指定在索引时间在文档的其中一个字段中为每个文档使用哪个分析器:

http://www.elasticsearch.org/guide/reference/mapping/analyzer-field.html

本质上,法语文档的语言字段设置为“法语”,这将指示Elasticsearch它需要应用法语词干规则并去除法语停用词。

现在我是否必须在查询时指定分析器,以便Elasticsearch在实际处理查询之前可以对查询应用相同的词干规则?如果是这样,那真是太遗憾了,因为我希望能够搜索整个索引,最终提供了一个“应该”子句,使某种语言的文档比其他语言更受青睐。

我不知道,Elasticsearch是否通过应用索引中到目前为止使用的每个分析器来构建多个查询。如果不是这样,我看到的唯一解决方案是根据文档的语言将它们拆分为不同的类型,然后并行触发多个查询,并在客户端上具有某种接收器功能,将合并结果并按分数对它们进行排序。但是,即使我可以发送批量查询(以限制网络往返),该解决方案显然也不是最优的。

有什么想法吗?

最佳答案

您可以为索引和搜索定义单独的分析器:

 "my_field":{
    "type":"string",
    "index_analyzer":"my_index_analyzer",
    "search_analyzer":"my_search_analyzer"
 }

您还可以在索引设置中指定默认分析器-这是真实示例:
"settings":{
    "number_of_shards":5,
    "number_of_replicas":1,
    "analysis":{
        "analyzer":{
            "default_index":{
                "type":"custom",
                "tokenizer":"whitespace",
                "filter":[
                    "trim",
                    "lowercase",
                    "asciifolding"
                ]
            },
            "default_search":{
                "type":"custom",
                "tokenizer":"keyword",
                "filter":[
                    "trim",
                    "lowercase",
                    "asciifolding"
                ]
            }
        }
    }
}

这样,您不必显式指定_analyzer字段

关于elasticsearch - 多语言Elasticsearch索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23278214/

相关文章:

url - 多语言网站 URL 的最佳实践

elasticsearch - Elasticsearch 结果不一致

PHP UTF-8 编码搞砸了

php - Laravel 5 多语言支持

iphone - 如何修复 Receiver in message expression is an uninitialized value warning

c++ - 看不懂VS2015 Analyzer报告

json - Elasticsearch查询中单引号 “json”对象中的R变量

elasticsearch - 如何将其他主要分片添加到Elasticsearch集群?

elasticsearch - Elasticsearch-为一个字段指定不同的索引和搜索分析器

Lucene 2.2 阿拉伯语分析器