直接填充更改以进行弹性搜索

时间:2018-11-23 22:39:55

标签: java elasticsearch jhipster

我正在编写一个小型演示应用程序,并使用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存储库进行重新索引。

是否可以使用某种实体侦听器(或其他任何方法)直接填充更改的数据?

感谢任何指针。

1 个答案:

答案 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广告,您将首先发现它的工作原理与您想象的一样。