我使用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和一
一些背景信息:“InChIKey有时被称为散列式InChI,它是一种固定长度(25个字符)的InChI数字化表示,这是人类无法理解的。InChIKey规范有助于网络搜索化合物,因为这些问题是有问题的与全长InChI“。 – Tim 2011-03-29 13:49:45