在Elasticsearch中索引Java Bean的简单方法
在數據存儲方面,Java程序員習慣于使用魔術般持久的Java Bean。 諸如Hibernate和用于關系數據存儲的JPA規范或Morphia和Spring Data MongoDB之類的解決方案是受歡迎的示例。
使用Elasticsearch的開發人員有時也有相同的愿望–傳遞Java bean并對其進行自動索引。 提供了適用于Elasticsearch的Spring Data實現,但是這可能對您來說是開銷,或者您的Elasticsearch版本不支持。 還有一個Jest ,它使用支持直接存儲Java Bean的HTTP API。
如果您想使用標準的Java客戶端(針對Elasticsearch)執行相同的操作,則沒有對此的直接支持,但是可以輕松地手動實現。
假設您要保留代表一本書的以下簡單對象結構。
Publisher publisher = new Publisher(); publisher.setCountry("UK"); publisher.setName("Packt"); Book book = new Book(); book.setTitle("Learning Spring Boot"); book.setAuthors(Arrays.asList("Greg L. Turnquist")); book.setPublisher(publisher);經常會發生的情況是,我們在認真思考一種解決問題的方法,以至于看不到更簡單的方法。 我們不需要Elasticsearch的特殊框架。 Elastcsearch將為您愉快地存儲大多數JSON結構。 幸運的是,使用Jackson或GSON之類的庫從Java對象創建JSON文檔是一個已解決的問題。
我們可以簡單地在項目中添加一個依賴項(在這種情況下,將其添加到jackson-databind) ,并實例化一個ObjectMapper。
ObjectMapper mapper = new ObjectMapper();如果您使用的是Spring Boot,通常甚至可以僅@Autowire ObjectMapper。 然后可以使用ObjectMapper創建對象的JSON表示形式。
String value = mapper.writeValueAsString(book);這將導致類似于此字符串。
{"title":"Learning Spring Boot","authors":["Greg L. Turnquist"],"publisher":{"name":"Packt","country":"UK"}}然后,您可以使用Elasticsearch客戶端界面為結果建立索引。
IndexResponse response = client.prepareIndex(indexName, "book").setSource(value).execute().actionGet();檢索文檔時,可以使用readValue方法再次創建Java對象。
GetResponse getResponse = client.prepareGet(indexName, "book", response.getId()).execute().actionGet(); String source = getResponse.getSourceAsString(); Book persistedBook = mapper.readValue(source, Book.class); assertEquals("Packt", persistedBook.getPublisher().getName());甚至更好:也許您甚至不需要再次創建Java對象? 當您僅在模板中顯示結果時,僅傳遞結果文檔的Map就足夠了嗎?
Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();有時,當我們甚至不需要復雜的解決方案時,他們也在尋找它們。 由于Elasticsearch到處都使用J??SON,因此使用Java或其他語言的通用庫進行序列化非常容易。
翻譯自: https://www.javacodegeeks.com/2016/07/simple-way-index-java-beans-elasticsearch.html
總結
以上是生活随笔為你收集整理的在Elasticsearch中索引Java Bean的简单方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魅族 PANDAER 120W 桌面超级
- 下一篇: 孱弱和羸弱的区别 孱弱和羸弱的不同