我正在编写一个小型演示应用程序,并使用jHipster生成了堆栈。由于我是Web开发的新手,因此遇到了一些问题,尤其是弹性搜索。
每当我在应用程序中更改实体数据时,更改的数据都不会反映在使用弹性搜索执行的搜索中。
我的理解是,如果将实体更改保存在相应的搜索存储库中,则应将其反映在ES索引中。我是否对此感到误解?
一个实时示例:
@Override
public Client save(Client client) {
log.debug("Request to save Client : {}", client);
Client result = clientRepository.save(client);
clientSearchRepository.save(result);
return result;
}
到目前为止,这已将更新的信息存储在我的MySQL数据库中。但是,假设我编辑了用户的出生日期并保存了它。每当我搜索包含该客户端的内容时,“旧的”出生日期仍会显示,直到我对ES存储库进行重新索引。
是否可以使用某种实体侦听器(或其他任何方法)直接填充更改的数据?
感谢任何指针。
答案 0 :(得分:0)
您应该在更新方法上使用相同的搜索存储库。上面的代码看起来不错,如果您的ElasticSearch配置正确,则应在创建/更新实体时更新索引。
使用JHipster实体生成器并启用elasticsearch,它应立即可用。
在ClientResource中,您将获得类似这样的内容来创建新的客户端:
@PostMapping("/clients")
@Timed
public ResponseEntity<Client> createClient(@Valid @RequestBody Client client) throws URISyntaxException {
Client result = clientRepository.save(client);
clientSearchRepository.save(result);
以及用于编辑客户的类似内容:
@PutMapping("/clients")
@Timed
public ResponseEntity<Client> updateClient(@Valid @RequestBody Client client) throws URISyntaxException {
Client result = clientRepository.save(client);
clientSearchRepository.save(result);
尝试生成一个新的空JHipster项目并包含ElasticSearch广告,您将首先发现它的工作原理与您想象的一样。