2013-08-26 5 views
0

Я хочу реализовать Fulltextsearch в MongoDB с использованием Hibernate OGM. Я написал код, но код возвращает мне пустой результат. Я проверил два файла, которые были созданы lucene с Luke, но кажется, что они оба пустые. Я не знаю, в чем причина моей проблемы.Полнотекстовый поиск в Mongodb с использованием Hibernate Ogm

Я включил полнотекстовый поиск в моей коллекции с помощью этой команды:

db.adminCommand({ setParameter : "*", textSearchEnabled : true }); 

, а также я поставил индекс на UserID поля в коллекции пользователей.

db.Users.ensureIndex({UserID:1 }) 

также у меня есть этот класс сущностей:

@Entity 
@Indexed 
@Table(name="Users") 
@GenericGenerator(name="mongodb_uuidgg",strategy = "uuid2") 
public class User implements Serializable{ 
    private static final long serialVersionUID=1L; 
    @DocumentId 
    private String id; 

    @Column(name="City") 
    @Field(index = Index.NO,analyze = Analyze.YES,store = Store.YES) 
    private String city; 

    @Column(name="UserID") 
    @NumericField 
    @Field(index = Index.YES,analyze = Analyze.NO,store = Store.YES) 
    private int IdU; 

и в моем классе DAO:

OgmConfiguration cfgogm=new OgmConfiguration(); 
cfgogm.configure("hibernate.cfg.xml"); 
serviceregistry=new ServiceRegistryBuilder().applySettings(cfgogm.getProperties()).buildServiceRegistry(); 
sessionfactory=cfgogm.buildSessionFactory(serviceregistry); 

sessionfactory.openSession(); 
FullTextSession fulltextsession= Search.getFullTextSession(sessionfactory.getCurrentSession()); 
QueryBuilder querybuilder=fulltextsession.getSearchFactory().buildQueryBuilder().forEntity(User.class).get(); 
org.apache.lucene.search.Query lucenequery=querybuilder.keyword().onField("IdU").matching(new Integer(87709)).createQuery(); 

org.hibernate.search.FullTextQuery fulltextquery=fulltextsession.createFullTextQuery(lucenequery,User.class); 
fulltextquery.initializeObjectsWith(ObjectLookupMethod.SKIP, DatabaseRetrievalMethod.FIND_BY_ID); 
List result=fulltextquery.list(); 
System.out.println(result.size()); 

Если я открываю segment.gen с Лукой, я вижу эту информацию: enter image description here

Не могли бы вы помочь мне решить эту проблему? или как я могу реализовать полнотекстовый поиск, используя Hibernate и Lucene с MongoDB

спасибо большое

ответ

1

Я не совсем уверен, что ваша общая цель, но вы путаете две вещи. Существует встроенная функция полнотекстового поиска mongodb, и есть Hibernate OGM, которую вы можете использовать в сочетании с Hibernate Search. Однако это две разные вещи. Установка параметра mongodb textSearchEnabled не будет создавать индекс Lucene, если вы этого ожидаете. Для создания начального индекса вам потребуется использовать API индексирования поиска гибернации или массовый индекс.

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