Hibernate Search-如果以前未对现有数据建立索引,则重新创建索引

时间:2019-01-07 14:44:27

标签: hibernate elasticsearch lucene hibernate-search

我有一个现有项目,该项目在DB中有很多数据。我正在将Hibernate Search添加到项目中。 由于我希望对现有数据建立索引,因此我想在

服务启动时开始对其进行索引
    import { Component, Input } from '@angular/core';

import { NgbModal, NgbActiveModal } from '@ng-bootstrap/ng-bootstrap';

@Component({
  selector: 'ngbd-modal-content',
  template: `
    <div class="modal-header">
      <button type="button" class="close" aria-label="Close" (click)="activeModal.dismiss('Cross click')">
        <span aria-hidden="true">&times;</span>
      </button>
      <h4 class="modal-title">Hi there!</h4>
    </div>
    <div class="modal-body">
      <p>Hello, {{name}}!</p>
    </div>
    <div class="modal-footer">
      <button type="button" class="btn btn-secondary" (click)="activeModal.close('Close click')">Close</button>
    </div>
  `
})
export class NgbdModalContent {
  @Input() name;

  constructor(public activeModal: NgbActiveModal) { }
}

@Component({
  selector: 'ngbd-modal-component',
  templateUrl: 'src/lazy/modal-component.html'
})
export class NgbdModalComponent {
  constructor(private modalService: NgbModal) { }

  open() {
    const modalRef = this.modalService.open(NgbdModalContent);
    modalRef.componentInstance.name = 'World';
  }
}

但是我只想做一次(当现有数据未建立索引时),因为以后所有的数据更改都将被同步。

所以我的问题是:Hibernate Search是否有任何方法可以检查是否已经为实体创建了索引?我需要它来了解是否必须重建所有索引(在首次启动时)(例如,升级后在我的应用程序启动时,并且不必清除所有索引并再次创建它们),以避免长时间每次重新启动应用程序时启动。

1 个答案:

答案 0 :(得分:2)

Hibernate Search无法安全可靠地检测到这一点,因此我们特意忽略了这一点。

最好添加一个自己触发的方法,以便可以显式控制它;也可以通过JMX轻松调用MassIndexer。

我通常在“管理员”控制面板视图中添加“重建索引”按钮;总是有用的;-)