java - 如何将数据从H2数据库导入elasticsearch?
问题描述
我正在尝试使用 elasticsearch 从 H2 数据库中搜索数据。elasticsearch在我的项目中工作正常。我在外部添加了elasticsearch。当我使用构造函数添加数据时,它会添加到elasticsearch。但是如果尝试将数据从H2数据库添加到elasticsearch,我会收到此错误。
- 创建文件中定义的名称为“itemMigrator”的 bean 时出错。
- 创建名为“userJpaRepository”的 bean 时出错:调用 init 方法失败;
- 没有找到用户类型的属性 findAll!
spring-boot-starter-parent 2.0.6.RELEASE
elasticsearch 版本-5.6.12
我正在关注这个例子https://www.hameister.org/SpringBootElasticsearch.html
http://techprimers.com/spring-data-elastic-search-example-3-using-spring-jpa/
用户.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>
用户存储库.java
public interface UsersRepository extends ElasticsearchRepository<User, Long>{
List<User> findByFirstName(String text);
List<User> findByRole(String text);
手动搜索资源.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);
}
}
配置文件
@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 是同一个类是否正确?请告诉我我在这里做错了什么。
解决方案
推荐阅读
- python - 如何在 3D 原子块上使用 Voronoi Tessellation
- css - 范围滑块在 IE 中无法正确显示
- php - 多维数组导致错误致命错误:在 PHPunit 5.7 laravel 5.6 中具有类类型提示的参数的默认值只能为 NULL
- c++ - 无法在 Windows 上安装最新的 GCC
- java - 'SELECT TOP 1 WITH TIES *' 在 java sql 连接器中工作吗?
- python - Python - 一个等于所有数字的幻数?
- java - 无法使用反射访问@ConfigurationProperties 类的变量?
- java - 在带有 vert.x 框架的 iText 7 中使用大表时出现堆空间错误
- angular - Angular 4 创建项目
- react-native - 如何集成braintree以在react-native中获取卡片随机数?