为什么Lucene有时不匹配InChikeys?
问题描述:
我使用Hibernate Search为我的数据库建立索引。我使用自定义分析器来进行索引和查询。我有一个名为inchikey的字段,它不应该被标记。示例值包括:为什么Lucene有时不匹配InChikeys?
- BBBAWACESCACAP-UHFFFAOYSA-N
- KEZLDSPIRVZOKZ-AUWJEWJLSA-N
当我看着我的卢克指数我可以证实,他们是不记号化,根据需要。
但是,当我尝试使用web应用程序搜索它们时,发现了一些inchikeys,而其他人则没有。奇怪的是,对于这些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();
更多关于我们的设置细节已张贴由Tim here和一
答
原来的最后条目输入文件没有被正确索引。这些被标记。实际上,它们似乎被索引了两次:一次没有被标记和一次。当我搜索时,我无法找到未标记的。
我还没有找到原因,但我认为它可能与我们的解析器结束,而Lucene仍然索引最后的条目,并因此Lucene恢复为默认分析器(StandardAnalyzer)。当我找到罪魁祸首时,我会在这里报告。
添加@Analyzer(implement执行= ChemicalNameAnalyzer.class)到田间地头解决了这个问题,但我想是我原来的设置,以确定一旦默认分析仪,在配置,像这样:
<property name="hibernate.search.analyzer">path.to.ChemicalNameAnalyzer</property>
一些背景信息:“InChIKey有时被称为散列式InChI,它是一种固定长度(25个字符)的InChI数字化表示,这是人类无法理解的。InChIKey规范有助于网络搜索化合物,因为这些问题是有问题的与全长InChI“。 – Tim 2011-03-29 13:49:45