私は、 'firstName'、 'lastName'、 'secondLastName'という文字列フィールドを持つ 'Patient'というエンティティを持っています(スペイン語では、 )Hibernate Search:別の列でフルネームを検索する方法
患者を名前で検索するためのテキストボックスが表示されています。ユーザーはfirstName、lastName、secondLastName、またはこれらの組み合わせを任意の順序で入力できます。
のfirstName:マウリシオ、 lastNameの:Ubilla、 secondLastName:カルバハル、
私は "マウリシオUbillaカルバハル" あるいは "マウリシオUbilla" を検索する場合、私がトップに表示されますことを期待し、私の名前を持つ例えば 、結果リスト 質問は次のとおりです。
1-これらの3つのフィールドのインデックスはどのように定義する必要がありますか?私は次のようにしました:
@Indexed
class Patient {
...
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String firstName = new String();
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String lastName = new String();
@Field(index=Index.YES, analyze=Analyze.YES, store=Store.NO)
protected String secondLastName = new String();
...
}
2-どのようにクエリをビルドしますか?私はこれをした:
QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Patient.class).get();
Query luceneQuery = qb.keyword().onFields("firstName", "lastName", "secondLastName").matching(name).createQuery();
しかし、これは私のために働いていない。それは何も例外をスローしていない、それは何も戻っていないことだけです。 "Mauricio"だけを検索しても、何も返されません。
しかし、私は私のfirstNameと一致するようにクエリを変更した場合:
QueryBuilder qb = fullTextSession.getSearchFactory().buildQueryBuilder().forEntity(Patient.class).get();
Query luceneQuery = qb.keyword().onFields("firstName").matching(name).createQuery();
私は「マウリシオ」を検索する場合、それは動作します。
私は間違っていますか? 3列の複合インデックスを定義する方法はありますか?クエリを別の方法で構築する必要がありますか?それはあなたがバグに実行されていることを非常に可能性がありますので 、私はHibernateの検索4.5.1以上にHibernate 4.3およびJava 1.7
ありがとうリンクから取得されます!それは私がやっていることです、それは正常に動作します。また、新しいバージョンのhibernateへのアップグレードに関する助言にも感謝します。私はすぐにそれをやらなければならないようだ。 –