2015-03-14 6 views
5

Предположим, у меня есть 2 объектов аннотированные для полнотекстового поиска:фильтр результатов поиска полный текст на поле USERID с Hibernate

@Entity 
public class User implements Serializable { 

    @Id 
    public Long id;  
    ... 

} 

@Entity 
@Indexed 
public class Post { 

    @Id 
    public Long id; 

    @Field(name = "content") 
    public String content; 

    @ManyToOne 
    public User user; 

    ... 

} 

Это очень просто write full text search on just content field. Но как я могу отфильтровать результаты по ключевым словам и идентификаторам пользователя? Например, запрос для поиска «привет» в поле содержимого и user.id равен 10?

ответ

2

Ключевое слово, которое вы ищете, представляет собой аннотацию IndexedEmbedded.

@ManyToOne 
@org.hibernate.search.annotations.IndexedEmbedded(includePaths={ "userId" })  
public User user; 

Если теперь создать LuceneIndex, там будет новое поле в вашем LuceneDocument называется User.userId. Теперь вы можете искать UserId (как String) и контент в комбинации. Пожалуйста, взгляните на Люка, чтобы проверить ваши файлы индекса.