将Apache Solr自定义插件与WordNet

时间:2017-09-07 23:04:53

标签: java solr jar wordnet

我正在为Apache Solr开发一个非常简单的自定义SearchComponent,它必须找到查询术语的同义词,并在找到的文档之外返回它们。为了获得同义词,我使用WordNet及其JWNL Java API。

我在Eclipse中使用JWNL教程中建议的代码创建了一个项目来启动字典:

    try {
        JWNL.initialize(new FileInputStream("properties.xml"));
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (JWNLException e) {
        e.printStackTrace();
    }

    final Dictionary dictionary = Dictionary.getInstance();

文件properties.xml如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<jwnl_properties language="en">
  <version publisher="Princeton" number="3.1" language="en"/>
  <dictionary class="net.didion.jwnl.dictionary.FileBackedDictionary">
    <param name="dictionary_element_factory" 
      value="net.didion.jwnl.princeton.data.PrincetonWN17FileDictionaryElementFactory"/>
    <param name="file_manager" value="net.didion.jwnl.dictionary.file_manager.FileManagerImpl">
      <param name="file_type" value="net.didion.jwnl.princeton.file.PrincetonRandomAccessDictionaryFile"/>
      <param name="dictionary_path" value="/path/dict"/>
    </param>
  </dictionary>
  <resource class="PrincetonResource"/>
</jwnl_properties>

在Eclipse中一切正常。如果我将包含所有必需库(Solr和JWNL)的项目导出到JAR文件并使用java -jar从另一个位置的终端运行它,它也可以工作。

但是如果我将JAR放在我的Solr Core的lib文件夹中以实现插件(在solrconfig.xml文件中正确注册后)并尝试运行一个简单的查询,此错误出现在响应中:

java.lang.NullPointerException\n\tat sir.WordNetExpansionSearchComponent.process(WordNetExpansionSearchComponent.java:86)

引用这行代码:

indexWordN = dictionary.getIndexWord(POS.NOUN, term);

尽管初始化,我试图检查并且dictionary似乎设置为null。这怎么可能?我该如何解决?

编辑1:

这是我注册插件的solrconfig.xml代码段:

  <!-- WordNet Query Expansion Search Component -->

  <searchComponent class="sir.WordNetExpansionSearchComponent" name="wordnetExpansionSearchComponent">
  </searchComponent>

  <!-- A request handler for demonstrating the WordNet Query Expansion component -->
  <requestHandler name="/expand" class="solr.SearchHandler">
      <arr name="last-components">
          <str>wordnetExpansionSearchComponent</str>
      </arr>
  </requestHandler>

0 个答案:

没有答案