我正在通过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());
这似乎没有返回任何结果?
答案 0 :(得分:0)
要回答有关如何搜索此问题的问题,可以使用QueryBuilders构建Elasticsearch查询。例如,querySearchQuery
可以使用boolQuery
:
userSearchRepository.search(
QueryBuilders.boolQuery()
.must(queryStringQuery(query))
.must(termsQuery("firstName", "John")))
这将搜索查询匹配且User
为firstName
的{{1}}。