为什么Lucene有时与InChIKeys不匹配?
我已经使用Hibernate搜索为我的数据库编制了索引。我使用一个自定义分析器,用于索引和查询。我有一个名为inchikey的字段,它不应该被标记化。示例值为:
- BBBAWACESCAAP-UHFFAOYSA-N
- KEZLDSPIRVZOKZ-AUWJEWJLSA-N
当我和Luke一起查看我的索引时,我可以确认它们没有按照要求标记化
然而,当我尝试使用web应用程序搜索它们时,一些Inchikey被找到,而另一些则没有。奇怪的是,对于这些inchikeys,当我搜索时没有最后一个连字符,搜索确实起作用,正如:BBBAWACESCACAP-uhffaoysa 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();
关于我们设置的更多详细信息已由Tim和I发布
# 1 楼答案
结果表明,输入文件中的最后一个条目没有正确编制索引。这些正在被标记化。事实上,它们似乎被索引了两次:一次没有标记,一次有标记。当我搜索时,我找不到未标记的
我还没有找到原因,但我认为这可能与我们的解析器在Lucene仍在索引最后的条目时结束有关,结果Lucene恢复到默认分析器(StandardAnalyzer)。当我找到罪犯时,我会在这里报告
将@Analyzer(impl=ChemicalNameAnalyzer.class)添加到字段可以解决问题,但我想要的是我的原始设置,在配置中定义一次默认分析器,如下所示: