1

我使用elasticsearch java-api與spring-data結合使用,並且在索引文檔時遇到問題。 我想要一個索引字段的不同名稱。這意味着不一樣的Java代碼:Java elasticsearch彈性數據集不同索引字段名稱

的domainObject:

@Document(indexName = "testindex", type = "message") 
public class MessageObject { 

@Id 
private String unid; 

@FieldNameInElasticIndex(value = "javaMessage") // I want anything like that 
private String message; 

private String secondMessage; 

private String thirdMessage; 

... 

getters & setters 

... 

} 

接口:

public interface MessageObjectRepository extends ElasticsearchRepository<MessageObject, Long> { 


} 

服務:

@Component 
public class MessageService { 

    @Autowired 
    private MessageObjectRepository repository; 


    public void addRegistrationObject(MessageObject msg) { 

     repository.save(msg); 
    } 
} 

所以....

是否可以更改名稱,因此該指數將是這樣的:的

"hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "testindex", 
     "_type": "message", 
     "_id": "00113B325ED357B7C1257E2D001D5B4B", 
     "_score": 1, 
     "_source": { 
      "unid": "00113B325ED357B7C1257E2D001D5B4B", 
      "javaMessage": "Hello", // <--- this is what I want (javaMessage) 
      "secondMessage": null, 
      "thirdMessage": "Third", 

代替

"hits": { 
    "total": 1, 
    "max_score": 1, 
    "hits": [ 
     { 
     "_index": "testindex", 
     "_type": "message", 
     "_id": "00113B325ED357B7C1257E2D001D5B4B", 
     "_score": 1, 
     "_source": { 
      "unid": "00113B325ED357B7C1257E2D001D5B4B", 
      "message": "Hello", // <--- this is NOT what I want (java name: message) 
      "secondMessage": null, 
      "thirdMessage": "Third", 

+0

有你試過'@JsonProperty(「javaMessage」)'? – Val

+0

它的工作原理,謝謝:) –

回答

1

的想法很簡單,就是用場上的@JsonProperty批註,給你想要的JSON序列化過程中使用的名稱:

@JsonProperty("javaMessage") 
private String message; 
+1

http://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/中沒有_single_提到'@ JsonProperty'!這在文檔中如何被忽略? –

0

Val發佈正確的解決方案:

@JsonProperty("name") 
相關問題