我已经使用 Hibernate Search 为我的数据库建立了索引。我使用自定义分析器,用于索引和查询。我有一个名为 inchikey 的字段不应被标记化。示例值为:
- BBBAWACESCACAP-UHFFFAOYSA-N
- KEZLDSPIRVZOKZ-AUWJEWJLSA-N
当我用 Luke 查看我的索引时,我可以确认它们没有按要求进行标记。
但是,当我尝试使用网络应用程序搜索它们时,会找到一些 inchikeys,而另一些则没有。奇怪的是,对于这些 inchikeys,当我在没有最后一个连字符的情况下进行搜索时,搜索确实有效,如下所示:BBBAWACESCACAP-UHFFFAOYSA N
我无法在未找到的 inchikeys 中找到共同元素。
知道这里发生了什么吗?
我使用 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();
Tim 和我在此处发布了有关我们设置的更多详细信息。