我想在我的项目中使用mongo和ElasticSearch,我也喜欢采用Spring Data Mongo和Spring Data ElasticSearch,但是两者都有各自的Repository和model specs,如何搭配使用?
有一些选项:
对 Mongo 和 ElasticSearch 使用相同的模型类?
@Document//from Spring Data Mongo @Document// from Spring Data ElasticSearch public class Book{ @Id//Spring Data Commons private String id; }
但是Spring Data Mongo和Spring Data ElasticSearch存在一些不匹配的地方,比如Geo字段类型。
为 Mongo 和 ElasticSearch 定义不同的模型,并在创建新模型时从 Mongo 模型复制数据状态并创建索引。
这里有什么建议吗?
我想在项目中使用选项 2。
- 正常保存 mongo 文档。
- 通过 JMS/AMQP/Reactor 触发事件将数据同步到 Elasticsearch,并为 ElasticSearch Document 中的每个字段选择索引策略。
- 所有搜索操作均基于 ElasticSearch。
更新于 2016 年 5 月 15 日
我创建了一个示例来演示这种方法。
我使用 Spring 内置的 ApplicationEvent 来演示这种方法。
事件发布者端,Mongo 保存帖子并发布事件。
@Component public class Publisher implements ApplicationEventPublisherAware { private static final Logger LOG = LoggerFactory.getLogger(Publisher.class); @Autowired PostRepository repository; private ApplicationEventPublisher publisher; public Publisher() { } public void savePost(Post post) { Post saved = repository.save(post); this.publisher.publishEvent(saved); LOG.debug("saved post data in mongo@" + saved); } @Override public void setApplicationEventPublisher(ApplicationEventPublisher publisher) { this.publisher = publisher; } }
事件接收方,接收数据并将其同步到 ElasticSearch 存储中。
@Component public class Receiver { private static final Logger LOG = LoggerFactory.getLogger(Receiver.class); @Autowired ESPostRepository repository; @EventListener public void onPostSaved(Post savedPost) { LOG.debug("=================received post data============== @\r\n"+ savedPost); ESPost doc=new ESPost(); doc.setId("1"); doc.setTitle(savedPost.getTitle()); doc.setContent(savedPost.getContent()); repository.save(doc); } }
在生产环境中,发布者和接收者可以通过JMA/AMQP放置在不同的应用程序中,而不是内置的ApplicationEvent。
mongo 用作主存储,ElasticSearch 用作索引/搜索服务器。
最佳答案
您可以只为不同的文档注释使用完全限定的域名吗?
这就是我们在这里要做的。
@Document(collection = "SPECTRUM")
@org.springframework.data.elasticsearch.annotations.Document(indexName = "spectrum", `type` = "spectra", shards = 1, replicas = 0, refreshInterval = "-1")
case class Spectrum(
...
)
关于spring - 使用Spring data mongo和Spring data elasticsearch时如何建模?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24472296/