Spring Data Elasticsearch嵌套查询

时间:2015-12-21 21:11:52

标签: elasticsearch spring-data jhipster

我正在通过jHipster使用Spring Data Elasticsearch支持,并且我正在尝试更多地学习使用搜索,因为它与在我的数据库中扩展一些新关系有关。

我与它自己的索引有一个新的嵌套关系:

@Entity
@Table(name = "friends")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Document(indexName = "friend")
public class Friend {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @OneToOne
    @Field(type=FieldType.Nested, index=FieldIndex.analyzed, store=true)
    private User friend1;

    @OneToOne
    @Field(type=FieldType.Nested, index=FieldIndex.analyzed, store=true)
    private User friend2;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public User getFriend1() {
        return friend1;
    }

    public void setFriend1(User friend1) {
        this.friend1 = friend1;
    }

    public User getFriend2() {
        return friend2;
    }

    public void setFriend2(User friend2) {
        this.friend2 = friend2;
    }

}

我想将结果过滤到特定用户“friend1.id”,然后搜索嵌套文档中的匹配详细信息?

     StreamSupport
        .stream(friendSearchRepository.search(
            QueryBuilders.boolQuery()               
.must(QueryBuilders.matchQuery("friend1.id",SecurityUtils.getCurrentUserId()))
            .must(QueryBuilders.matchQuery("friend2.login",query))).spliterator(), false)
            .collect(Collectors.toList());

这似乎没有返回任何结果?

1 个答案:

答案 0 :(得分:0)

要回答有关如何搜索此问题的问题,可以使用QueryBuilders构建Elasticsearch查询。例如,querySearchQuery可以使用boolQuery

与其他类型的查询结合使用

userSearchRepository.search( QueryBuilders.boolQuery() .must(queryStringQuery(query)) .must(termsQuery("firstName", "John")))

这将搜索查询匹配且UserfirstName的{​​{1}}。