尝试为我的Elasticsearch索引设置分析器

时间:2016-02-23 09:24:02

标签: elasticsearch

具有以下映射:

curl -XPUT 'localhost:9200/borrador' -d '{
  "mappings": {
    "item": {
       "dynamic": "strict",
       "properties" : {
            "title" : { "type" : "string" },
            "body" : { "type": "string"  },
            "source_id" : { "type": "integer"  },
}}}}'

我使用以下Elasticsearch-JDBC importer脚本从我的数据库导入所有数据

#!/bin/sh

bin=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/bin
lib=/usr/share/elasticsearch/elasticsearch-jdbc-2.1.1.2/lib
echo "Indexando base de datos..."
echo '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "jdbc:mydbip/mydbname",
        "user" : "username",
        "password" : "pw",
        "sql" : "select source_id, body, id as _id from table_name",
        "index" : "borrador",
        "type" : "item",
        "detect_json": false  
    }
}' | java \
       -cp "${lib}/*" \
       -Dlog4j.configurationFile=${bin}/log4j2.xml \
       org.xbib.tools.Runner \
       org.xbib.tools.JDBCImporter 

问题是,我正在寻找一个符合我的方法的analyzer,但我有点迷失:我正在寻找一种方法使用可以适应多种语言的analyzer 这意味着有时DB的条目是西班牙语,英语或任何其他语言。用户将数据添加到数据库中,因此它可以是任何语言,并且语言本身也不存储,这意味着我无法知道哪种语言具有当前条目。此外,这些语言并不混合(没有一行有两种不同的语言)。

归档此目标的最佳方法是什么?对所有语言使用通用分析器会更好,还是最好为每种语言构建不同的分析器?如果有人向我提供了analyzer的映射,我们将非常感激。

1 个答案:

答案 0 :(得分:0)

您可以尝试为使用的每种语言使用多字段body.enbody.fr,...

例如:

"properties": {
                "body" : {
                    "type": "string",
                    "fields": {
                        "fr": {
                            "type": "string",
                            "analyzer": "french"
                        },
                        "en": {
                            "type": "string",
                            "analyzer": "english"
                        },
                        "es": {
                            "type": "string",
                            "analyzer": "spanish"
                        },
                        "de": {
                            "type": "string",
                            "analyzer": "german"
                        },
                        "pt": {
                            "type": "string",
                            "analyzer": "portuguese"
                        },
                        "nl": {
                            "type": "string",
                            "analyzer": "dutch"
                        },
                        "dk": {
                            "type": "string",
                            "analyzer": "danish"
                        }
                    }
                }