Как импортировать данные из базы данных H2 в эластичный поиск? - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь найти данные из базы данных 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 одного класса? Скажите, пожалуйста, что я делаю не так?

...