2017-09-27 107 views
0

我有這樣的分析:的對象領域應用分析

{ 
    "index": { 
    "number_of_shards": 1, 
    "analysis": { 
     "filter": { 
     "word_joiner": { 
      "type": "word_delimiter", 
      "catenate_all": true, 
      "preserve_original": true 
     } 
     }, 
     "analyzer": { 
     "word_join_analyzer": { 
      "type": "custom", 
      "filter": [ 
      "word_joiner" 
      ], 
      "tokenizer": "keyword" 
     } 
     } 
    } 
    } 
} 

我把它在這一領域:

@Field(type = FieldType.Object, analyzer = "word_join_analyzer") 
private Description description; 

這裏是描述類:

public class Description { 

     @JsonProperty("localizedDescriptions") 
     private Map<String, String> descriptions = new HashMap<>(); 
} 

這是由此產生的Elasticsearch映射爲此字段:

{ 
    "description":{ 
     "properties":{ 
     "localizedDescriptions":{ 
      "properties":{ 
       "en":{ 
        "type":"string" 
       }, 
       "fr":{ 
        "type":"string" 
       }, 
       "it":{ 
        "type":"string" 
       } 
      } 
     } 
     } 
    } 
} 

就像你所看到的,anlyzer根本不適用。它適用於字符串字段,但我很難用Object類型來完成它。有任何想法嗎?
謝謝!

編輯:我試圖用一個動態映射:

{ 
    "iam":{ 
    "properties":{ 
     "dynamic_templates":[ 
     { 
      "localized_strings_values":{ 
      "path_match":"description.localizedDescriptions.*", 
      "mapping":{ 
       "type":"string", 
       "analyzer":"word_join_analyzer" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

但我有此錯誤:

Expected map for property [fields] on field [dynamic_templates] but got a class java.lang.String 

爲什麼會出現這個錯誤?

+0

您不能將分析器應用於對象字段,您需要將其顯式添加到所需的所有字符串字段中。 – Val

+0

在這種情況下我該怎麼辦?這是一張地圖。 – Anna

+0

您是否嘗試將分析儀直接放在說明字段中? – Val

回答

0

Finaly解決了這個問題。這是正確的映射:

{ 
    "cake": { 
    "dynamic_templates": [ 
     { 
     "localized_descriptions": { 
      "path_match": "description.localizedDescriptions.*", 
      "mapping": { 
      "type": "string", 
      "analyzer": "word_join_analyzer" 
      } 
     } 
     } 
    ] 
    } 
}