Spring Data JPAがPostgresデータベースで設定されているSpring BootアプリケーションにEmbedded Elasticsearchを設定するのが初めてです。SpringブートJPA + SpringデータElasticSearch:elasticは結果を返しません。
私はElastic Search Springデータリポジトリのサポートを追加しました(または私は考えました)。問題は、ESA検索では何も返されない(JSON配列は空です)、JPAのものは正しく機能することです。
私は、今は毎回実行されるインデックスツールが必要だと読んでいますが、これに関連するものはSpring Data Elastic Searchドキュメントでは見つけられませんでした。
データベースからの検索結果を常にインデックスに登録する必要があることを正しく理解していますか?
@SpringBootApplication
@EnableJpaRepositories(basePackages = "eu.deniss.repository")
@ComponentScan
public class SpringDataElasticsearchDemoApplication {
public static void main(String[] args) {
SpringApplication.run(SpringDataElasticsearchDemoApplication.class, args);
}
}
人エンティティクラス:
@Entity
@Document(indexName = "person", type = "person")
public class Person {
private Long id;
private String firstName;
private String lastName;
private String email;
private String gender;
private String ipAddress;
@Id
@org.springframework.data.annotation.Id
@Column(name = "id")
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
...
}
PersonSearchRepositoryクラス:
ここアプリケーションクラスです。このトピックBatch indexing Spring Data JPA entries to Elastic through Spring Data ElasticSearch唯一のソリューションで提供さ答えは
public interface PersonSearchRepository extends ElasticsearchRepository<Person, Long> {
}
PersonServiceImplクラス:
@Service
public class PersonServiceImpl implements PersonService {
private final PersonRepository personRepository;
private final PersonSearchRepository personSearchRepository;
private final PersonMapper personMapper;
private static final Logger log = Logger.getLogger(PersonServiceImpl.class);
public PersonServiceImpl(PersonRepository personRepository, PersonSearchRepository personSearchRepository, PersonMapper personMapper) {
this.personRepository = personRepository;
this.personSearchRepository = personSearchRepository;
this.personMapper = personMapper;
}
...
@Override
@Transactional(readOnly = true)
public Page<PersonDTO> search(String query, Pageable pageable) {
log.info("Request to search for a page of People with a query " + query);
Page<Person> result = personSearchRepository.search(queryStringQuery(query), pageable);
return result.map(person -> personMapper.personToPersonDTO(person));
}
}
PersonControllerクラス:
@RestController()
@RequestMapping("/api")
public class PersonController {
private final PersonService personService;
private final Logger log = LoggerFactory.getLogger(PersonController.class);
private static final String ENTITY_NAME = "person";
public PersonController(PersonService personService) {
this.personService = personService;
}
@GetMapping("/_search/people")
public ResponseEntity<List<PersonDTO>> searchPeople(@RequestParam String query, Pageable pageable) throws URISyntaxException {
log.info("REST request to search for a page of Appointments for query {} ", query);
Page<PersonDTO> page = personService.search(query, pageable);
HttpHeaders headers = PaginationUtil.generateSearchPaginationHttpHeaders(query, page, "/api/_search/people");
return new ResponseEntity<>(page.getContent(), headers, HttpStatus.OK);
}
}
を使用することにより弾性検索に保存するのバッチジョブをしなければならなかった
がインデックス化されます。 '@ Document'を追加しても、何かをデータベースに保存するときに自動的にはそれが弾性に保存されるわけではありません。 –
@ M.Deinumなので、バッチジョブを実行して、すべてのDBデータを読み込み、Elastic Searchに保存する必要がありますか? –