2011-03-29 160 views
2

我使用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和一

+1

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

回答

2

原来的最后条目输入文件没有被正确索引。这些被标记。实际上,它们似乎被索引了两次:一次没有被标记和一次。当我搜索时,我无法找到未标记的。

我还没有找到原因,但我认为它可能与我们的解析器结束,而Lucene仍然索引最后的条目,并因此Lucene恢复为默认分析器(StandardAnalyzer)。当我找到罪魁祸首时,我会在这里报告。

添加@Analyzer(implement执行= ChemicalNameAnalyzer.class)到田间地头解决了这个问题,但我想是我原来的设置,以确定一旦默认分析仪,在配置,像这样:

<property name="hibernate.search.analyzer">path.to.ChemicalNameAnalyzer</property> 
相关问题