【问题标题】:Multilingual Elasticsearch index多语言 Elasticsearch 索引
【发布时间】:2014-06-10 06:54:59
【问题描述】:

我正在索引一堆不同语言的文档,据我所知,我可以通过使用 _analyzer 映射在文档的一个字段中指定在索引时为每个文档使用哪个分析器:

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

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

现在我是否必须在查询时指定一个分析器,以便 Elasticsearch 可以在实际处理查询之前将相同的词干规则应用于查询?如果是这样,那就有点令人沮丧了,因为我希望能够搜索整个索引,最终提供一个“应该”子句来支持某种语言的文档而不是其他语言。

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

有什么想法吗?

【问题讨论】:

    标签: elasticsearch multilingual analyzer stop-words stemming


    【解决方案1】:

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

     "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 字段

    【讨论】:

      猜你喜欢
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-17
      • 2013-10-31
      • 1970-01-01
      • 2014-01-05
      相关资源
      最近更新 更多