我正在开发一个计划将elasticsearch用作数据存储库的系统.我正在尝试选择开发我的应用程序的最佳方法,该应用程序可以索引和查询elasticsearch中的数据.我拥有的系统建立在Spring框架之上.
使用Spring-data-elasticsearch(https://github.com/spring-projects/spring-data-elasticsearch)是一个不错的选择吗?
或者使用elasticsearch核心库本身是一个不错的选择?
我需要处理嵌套数据(内部对象),但Spring-data-elasticsearch最近似乎没有操作.
我希望我能找到问题的解决方案.提前致谢.
Spring数据elasticsearch支持弹性搜索的大多数常见功能集,包括嵌套,内部对象和父子(最近).
当你说要使用嵌套数据(内部对象)时,请清楚,因为elasticsearch有两个概念:内部对象和嵌套对象.
在弹性搜索中管理关系可以找到详细的解释
人员实体:
@Document(indexName = "person" , type = "user") public class Person { @Id private String id; private String name; @Field( type = FieldType.Nested) private List<Car> car; // setters-getters }
汽车实体:
public class Car { private String name; private String model; //setters and getters }
设置数据:
Person foo = new Person(); foo.setName("Foo"); foo.setId("1"); List<Car> cars = new ArrayList<Car>(); Car subaru = new Car(); subaru.setName("Subaru"); subaru.setModel("Imprezza"); cars.add(subaru); foo.setCar(cars);
索引:
IndexQuery indexQuery = new IndexQuery(); indexQuery.setId(foo.getId()); indexQuery.setObject(foo); //creating mapping elasticsearchTemplate.putMapping(Person.class); //indexing document elasticsearchTemplate.index(indexQuery); //refresh elasticsearchTemplate.refresh(Person.class, true);
搜索:
QueryBuilder builder = nestedQuery("car", boolQuery() .must(termQuery("car.name", "subaru")) .must(termQuery("car.model", "imprezza"))); SearchQuery searchQuery = new NativeSearchQueryBuilder().withQuery(builder).build(); List<Person> persons = elasticsearchTemplate.queryForList(searchQuery, Person.class);
您可以在嵌套对象测试中找到有关嵌套和内部对象的更多测试用例