Hibernate Search Annotations@Field(index = Index.TOKENIZED)
の使用 (ほとんどは . を使用して、インデックス付きのすべてのフィールドに対してテキスト検索をセットアップしましたがMultiFieldQueryParser
、これはこれまでのところ正常に機能しています。
索引付けされ、検索可能なフィールドの中には、サンプル値を持つ CompoundName と呼ばれるフィールドがあります。
3-Hydroxyflavone
6,4'-Dihydroxyflavone
これらの値のいずれかを完全に検索すると、関連する複合インスタンスが返されます。ただし、部分的な名前を使用してワイルドカードを導入すると、問題が発生します。
- を検索して
3-Hydroxyflav*
も正しいヒットが得られますが、 - を検索し
6,4'-Dihydroxyflav*
ても何も見つかりません。
今、私はLucene / Hibernate-searchにまったく慣れていないので、この時点でどこを見るべき'
かよくわかりません..2番目のクエリの現在と関係があるのではないかと思いますが、わかりません続行する方法..トークナイザー/アナライザー/クエリパーサーまたは他の何かを完全に調べる必要がありますか?
または、できればマルチフィールド検索の動作を壊さずに、2番目のワイルドカード検索を一致させる方法を教えてもらえますか?
Hibernate-Search 3.1.0.GA と Lucene-core 2.9.3 を使用しています。
私の現在のアプローチを説明するためのいくつかの関連コードビット:
インデックス化された化合物クラスの関連部分:
@Entity
@Indexed
@Data
@EqualsAndHashCode(callSuper = false, of = { "inchikey" })
public class Compound extends DomainObject {
@NaturalId
@NotEmpty
@Length(max = 30)
@Field(index = Index.TOKENIZED)
private String inchikey;
@ManyToOne
@IndexedEmbedded
private ChemicalClass chemicalClass;
@Field(index = Index.TOKENIZED)
private String commonName;
...
}
現在、インデックス付きフィールドを検索する方法:
String[] searchfields = Compound.getSearchfields();
MultiFieldQueryParser parser =
new MultiFieldQueryParser(Version.LUCENE_29, searchfields, new StandardAnalyzer(Version.LUCENE_29));
FullTextSession fullTextSession = Search.getFullTextSession(getSession());
FullTextQuery fullTextQuery =
fullTextSession.createFullTextQuery(parser.parse("searchterms"), Compound.class);
List<Compound> hits = fullTextQuery.list();