Hibernate Search を使用してデータベースにインデックスを付けました。インデックス作成とクエリの両方にカスタム アナライザーを使用しています。トークン化されるべきではない inchikey というフィールドがあります。値の例は次のとおりです。
- BBBAWACESCACAP-UHFFFAOYSA-N
- KEZLDSPIRVZOKZ-AUWJEWJLSA-N
Luke でインデックスを調べると、必要に応じてトークン化されていないことを確認できます。
しかし、ウェブアプリで検索しようとすると、インチキーが見つかるものと見つからないものがあります。興味深いことに、これらの inchikeys では、最後のハイフンなしで検索すると検索が機能します。 BBBAWACESCACAP-UHFFFAOYSA N
見つからないインチキーに共通する要素を見つけることができませんでした。
ここで何が起こっているのか分かりますか?
MultiFieldQueryParser を使用して、データベース内のさまざまなフィールドを検索します。
String[] searchfields = Compound.getSearchfields();
MultiFieldQueryParser parser = new MultiFieldQueryParser(Version.LUCENE_29, Compound.getSearchfields(), new ChemicalNameAnalyzer());
//Disable the following if search performance is too slow
parser.setAllowLeadingWildcard(true);
FullTextQuery fullTextQuery = fullTextSession.createFullTextQuery(parser.parse("searchterms"), Compound.class);
List<Compound> hits = fullTextQuery.list();
セットアップの詳細については、ティムと私がここに投稿しています。