有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么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) 个答案

  1. # 1 楼答案

    结果表明,输入文件中的最后一个条目没有正确编制索引。这些正在被标记化。事实上,它们似乎被索引了两次:一次没有标记,一次有标记。当我搜索时,我找不到未标记的

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

    将@Analyzer(impl=ChemicalNameAnalyzer.class)添加到字段可以解决问题,但我想要的是我的原始设置,在配置中定义一次默认分析器,如下所示:

    <property name="hibernate.search.analyzer">path.to.ChemicalNameAnalyzer</property>