Я пытаюсь найти данные из базы данных H2, используяasticsearch.asticsearch отлично работает в моем проекте. Я добавил эластичный поиск внешне. Когда я добавляю данные с помощью конструктора, он добавляет вasticsearch.but, если я пытаюсь добавить данные из базы данных H2 вasticsearch, я получаю эту ошибку.
-Ошибка создания бина с именем 'itemMigrator 'определен в файле.
-Ошибка создания бина с именем' userJpaRepository ': сбой вызова метода init;
-Не найдено свойство findAll для типа User!
spring-boot-родительский родитель 2.0.6.RELEASE
asticsearch version-5.6.12
Я следую этому примеру https://www.hameister.org/SpringBootElasticsearch.html
http://techprimers.com/spring-data-elastic-search-example-3-using-spring-jpa/
User.java
@Entity
@Document(indexName = "user", type = "user", shards = 1)
@Table(name = "user_detail")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@NotBlank
@Column(name = "first_name")
private String firstName;
@NotBlank
@Column(name = "last_name")
private String lastName;
SearchQueryBuilder.java
@Component
public class SearchQueryBuilder {
private ElasticsearchTemplate elasticsearchTemplate;
@Autowired
public SearchQueryBuilder(ElasticsearchTemplate elasticsearchTemplate) {
this.elasticsearchTemplate = elasticsearchTemplate;
}
public List<User> getAll(String text) {
QueryBuilder query = QueryBuilders.boolQuery()
.should(
QueryBuilders.queryStringQuery(text)
.lenient(true)
.field("firstName")
.field("role")
).should(QueryBuilders.queryStringQuery("*" + text + "*")
.lenient(true)
.field("firstName")
.field("role"));
NativeSearchQuery build = new NativeSearchQueryBuilder()
.withQuery(query)
.build();
List<User> userses = elasticsearchTemplate.queryForList(build, User.class);
return userses;
}
}
ItemMigrator.java
@Autowired
ElasticsearchOperations operations;
@Autowired
UsersRepository UsersRepository;
@Autowired
UserJpaRepository jpaRepository;
@Autowired
public ItemMigrator(UserJpaRepository jpaRepository, ElasticsearchTemplate operations, UsersRepository UsersRepository) {
this.jpaRepository = jpaRepository;
this.operations = operations;
this.UsersRepository = UsersRepository;
}
@PostConstruct
@Transactional
public void loadAll() {
Iterable<User> items = jpaRepository.findAll();
operations.putMapping(User.class);
UsersRepository.saveAll(items);
}
}
UserJpaRepository.java
public interface UserJpaRepository extends JpaRepository<User, Long>
UsersRepository.java
public interface UsersRepository extends ElasticsearchRepository<User, Long>{
List<User> findByFirstName(String text);
List<User> findByRole(String text);
ManualSearchResource.java
@RestController
@RequestMapping("/rest/manual/search")
public class ManualSearchResource {
@Autowired
private SearchQueryBuilder searchQueryBuilder;
@GetMapping(value = "/{text}")
public List<User> getAll(@PathVariable final String text) {
return searchQueryBuilder.getAll(text);
}
}
Config.java
@Configuration
@EnableJpaRepositories(basePackages = "net.kzn.shoppingbackend")
@EnableElasticsearchRepositories(basePackages = "net.kzn.shoppingbackend")
@ComponentScan(basePackages = { "net.kzn.shoppingbackend" })
public class Config {
@Bean
public Client client() throws UnknownHostException {
Settings settings = Settings.builder()
.put("client.transport.sniff", true)
.put("cluster.name", "elasticsearch").build();
@SuppressWarnings("resource")
TransportClient client = new PreBuiltTransportClient(settings)
.addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
return client;
}
@Bean
public ElasticsearchOperations elasticsearchTemplate() throws UnknownHostException {
return new ElasticsearchTemplate(client());
}
}
Это моя трассировка стека https://www.dropbox.com/s/nxf2a3m961dx7a7/elastic_error.txt?dl=0
Это корПрямо, чтобы добавить @Entity и @Document одного класса? Скажите, пожалуйста, что я делаю не так?