2015-12-21 2 views
0

Я использую поддержку данных Spring Elticearch через 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

Чтобы ответить на вопрос о том, как искать это, запрос Elasticsearch может быть построен с использованием QueryBuilders. Например, querySearchQuery можно комбинировать с другими типами запросов с использованием boolQuery:

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

Это будет искать User с, где матчи запросов и firstName является John.

+0

Итак, посмотрев [queryStringQuery] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html), который включает в себя множество терминов, но несколько примеров, возможно: [имеет дочерний запрос] (https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-has-child-query.html), но разве у меня нет как-нибудь изменить свой индекс? –

Смежные вопросы