java - 在 Spring java 框架中使用 ElasticSearch 的最佳方式

标签 java spring frameworks elasticsearch spring-data-elasticsearch

我正在开发一个系统,计划将 Elasticsearch 用作数据存储库。 我正在尝试选择开发我的应用程序的最佳方式,该应用程序可以索引和查询来自 elasticsearch 的数据。 我的系统是建立在 Spring 框架之上的。

使用 Spring-data-elasticsearch( https://github.com/spring-projects/spring-data-elasticsearch ) 是不是一个不错的选择?

或者使用elasticsearch核心库本身是一个不错的选择?

我需要处理嵌套数据(内部对象),但 Spring-data-elasticsearch 最近似乎没有任何操作。

我希望我能找到问题的解决方案。 提前致谢。

最佳答案

Spring data elasticsearch支持elasticsearch的大部分常用功能集,包括嵌套、内部对象和父子(最近)。

当您说要使用嵌套数据(内部对象)时,请清楚elasticsearch有两个概念:内部对象和嵌套对象。

详细解释见managing relationship in 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);

您可以在 Nested Object Tests 找到更多关于嵌套和内部对象的测试用例

关于java - 在 Spring java 框架中使用 ElasticSearch 的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931053/

相关文章:

git - 将 GIT 用于在多个位置具有目录的项目

java - 业务规则验证的框架/设计模式

java - Mockito 模拟调用点指向 Junit 代码(ParentRunner)

java - 有没有办法在不手动下载新版本的情况下更新JDK?

java - 从静态类接收数据

ios - 删除 "Embedded binary"后,Xcode 不会添加 "DerivedData"

JAVA Unrecognized Character 第一行第一个字符

java - 安卓OpenGL ES 2.0 : Text aren't showing up

JSON - Spring MVC : How to post json data to spring MVC controller

java - Spring MVC 处理 dao.EmptyResultDataAccessException