0

Hibernate OGM を使用して MongoDB に Fulltextsearch を実装したいと考えています。コードを書きましたが、コードは空の結果を返します。lucene と Luke で生成された 2 つのファイルを確認しましたが、どちらも空のようです。私の問題の原因がわかりません。

次のコマンドを使用して、コレクションで全文検索を有効にしました。

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

また、Users コレクションの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());

Luke で segment.gen を開くと、次の情報が表示されます。 ここに画像の説明を入力

この問題を解決するのを手伝ってくれませんか? または、MongoDB で Hibernate と Lucene を使用して全文検索を実装するにはどうすればよいですか

どうもありがとうございます

4

1 に答える 1

1

ここでの全体的な目標が何であるかはよくわかりませんが、2 つのことを混ぜ合わせています。組み込みの mongodb 全文検索機能があり、Hibernate Search と組み合わせて使用​​できる Hibernate OGM があります。ただし、これらは 2 つの異なるものです。mongodb パラメータ textSearchEnabled を設定しても、Lucene インデックスは作成されません。初期インデックスを作成するには、Hibernate Search インデックス API またはマス インデクサーを使用する必要があります。

于 2013-09-05T06:07:03.467 に答える