Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在solr搜索组件中添加多个建议定义_Java_Apache_Solr_Lucene_Autosuggest - Fatal编程技术网

Java 如何在solr搜索组件中添加多个建议定义

Java 如何在solr搜索组件中添加多个建议定义,java,apache,solr,lucene,autosuggest,Java,Apache,Solr,Lucene,Autosuggest,我正在使用Solr5.1。我正在尝试根据配置Solr搜索组件中的多个suggester定义 我已经完美地配置了单个建议程序,它工作得也很好,但每当我尝试配置多个建议程序时,它都会给我以下错误 java.lang.NullPointerException at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:190) at org.apache.solr.han

我正在使用Solr5.1。我正在尝试根据配置Solr搜索组件中的多个suggester定义

我已经完美地配置了单个建议程序,它工作得也很好,但每当我尝试配置多个建议程序时,它都会给我以下错误

java.lang.NullPointerException
    at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:190)
    at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:143)
    at org.apache.solr.core.SolrCore.execute(SolrCore.java:1984)
    at org.apache.solr.core.QuerySenderListener.newSearcher(QuerySenderListener.java:64)
    at org.apache.solr.core.SolrCore$5.call(SolrCore.java:1751)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)


org.apache.lucene.store.AlreadyClosedException: this Directory is closed
    at org.apache.lucene.store.BaseDirectory.ensureOpen(BaseDirectory.java:50)
    at org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:244)
    at org.apache.lucene.store.NativeFSLockFactory.makeFSLock(NativeFSLockFactory.java:85)
    at org.apache.lucene.store.FSLockFactory.makeLock(FSLockFactory.java:39)
    at org.apache.lucene.store.BaseDirectory.makeLock(BaseDirectory.java:44)
    at org.apache.lucene.index.IndexWriter.<init>(IndexWriter.java:774)
    at org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester.build(AnalyzingInfixSuggester.java:296)
    at org.apache.lucene.search.suggest.Lookup.build(Lookup.java:193)
    at org.apache.solr.spelling.suggest.SolrSuggester.build(SolrSuggester.java:163)
    at org.apache.solr.handler.component.SuggestComponent$SuggesterListener.buildSuggesterIndex(SuggestComponent.java:524)
    at org.apache.solr.handler.component.SuggestComponent$SuggesterListener.newSearcher(SuggestComponent.java:506)
    at org.apache.solr.core.SolrCore$5.call(SolrCore.java:1751)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)

org.apache.solr.common.SolrException
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:885)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:652)
    at org.apache.solr.core.CoreContainer.create(CoreContainer.java:518)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:283)
    at org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:277)
    at java.util.concurrent.FutureTask.run(FutureTask.java:262)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.RuntimeException
    at org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory.create(AnalyzingInfixLookupFactory.java:138)
    at org.apache.solr.spelling.suggest.SolrSuggester.init(SolrSuggester.java:107)
    at org.apache.solr.handler.component.SuggestComponent.inform(SuggestComponent.java:119)
    at org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:620)
    at org.apache.solr.core.SolrCore.<init>(SolrCore.java:868)
    ... 8 more
java.lang.NullPointerException
位于org.apache.solr.handler.component.SearchHandler.HandlerRequestBody(SearchHandler.java:190)
位于org.apache.solr.handler.RequestHandlerBase.HandlerRequest(RequestHandlerBase.java:143)
位于org.apache.solr.core.SolrCore.execute(SolrCore.java:1984)
位于org.apache.solr.core.QuerySenderListener.newSearcher(QuerySenderListener.java:64)
位于org.apache.solr.core.SolrCore$5.call(SolrCore.java:1751)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
org.apache.lucene.store.AlreadyClosedException:此目录已关闭
在org.apache.lucene.store.BaseDirectory.com上重新打开(BaseDirectory.java:50)
位于org.apache.lucene.store.FSDirectory.getDirectory(FSDirectory.java:244)
位于org.apache.lucene.store.NativeFSLockFactory.makeFSLock(NativeFSLockFactory.java:85)
位于org.apache.lucene.store.FSLockFactory.makeLock(FSLockFactory.java:39)
位于org.apache.lucene.store.BaseDirectory.makeLock(BaseDirectory.java:44)
位于org.apache.lucene.index.IndexWriter(IndexWriter.java:774)
位于org.apache.lucene.search.suggest.analysis.AnalyzingFixSuggester.build(AnalyzingFixSuggester.java:296)
位于org.apache.lucene.search.suggest.Lookup.build(Lookup.java:193)
位于org.apache.solr.spelling.suggest.solrsugster.build(solrsugster.java:163)
位于org.apache.solr.handler.component.SuggestComponent$SuggesterListener.buildSuggesterIndex(SuggestComponent.java:524)
位于org.apache.solr.handler.component.SuggestComponent$SuggesterListener.newSearcher(SuggestComponent.java:506)
位于org.apache.solr.core.SolrCore$5.call(SolrCore.java:1751)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
org.apache.solr.common.SolrException
位于org.apache.solr.core.SolrCore(SolrCore.java:885)
位于org.apache.solr.core.SolrCore(SolrCore.java:652)
位于org.apache.solr.core.CoreContainer.create(CoreContainer.java:518)
位于org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:283)
位于org.apache.solr.core.CoreContainer$1.call(CoreContainer.java:277)
在java.util.concurrent.FutureTask.run(FutureTask.java:262)处
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
位于java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
运行(Thread.java:745)
原因:java.lang.RuntimeException
位于org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory.create(AnalyzingInfixLookupFactory.java:138)
位于org.apache.solr.spelling.suggest.solrsugster.init(solrsugster.java:107)
位于org.apache.solr.handler.component.SuggestComponent.info(SuggestComponent.java:119)
位于org.apache.solr.core.SolrResourceLoader.inform(SolrResourceLoader.java:620)
位于org.apache.solr.core.SolrCore(SolrCore.java:868)
... 8个以上
以下是我的solrconfig.xml


建议
org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory
org.apache.solr.spelling.suggest.DocumentDictionaryFactory
糖分析器
令牌分析器
建议你的名字
真的
建议2
org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory
org.apache.solr.spelling.suggest.DocumentDictionaryFactory
糖分析器
令牌分析器
建议
真的
真的
真的
建议
建议2
真的
5.
真的
建议

在solrconfig.xml中,两个建议者lookupImpl参数都是org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory

<str
 name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory</str>
org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory
尝试使用更改suggester2 lookupImpl

FuzzyLookupFactory

<str
 name="lookupImpl">org.apache.solr.spelling.suggest.fst.AnalyzingInfixLookupFactory</str>
org.apache.solr.spelling.suggest.fst.FuzzyLookupFactory

感谢您的回答@Dhanesh S Radhakrishnar,您是对的,但我们实际上正在将AnalyzingInfixLookupFactory更改为FuzzyLookupFactory,这很有效,但我们的目的已经失去。无论如何,我已经找到了解决方案,问题是,我们需要在第二个suggester的实现中添加analyzer的indexPath。:)


我的建议者
解析固定查找工厂
文档字典工厂
建议
产品标识表
糖分析器
真的
我的建议2
解析固定查找工厂
文档字典工厂
建议你的名字
产品标识表
糖分析器
系统目录/newSuggester2的路径
真的
<searchComponent class="solr.SuggestComponent" name="suggest">
  <lst name="suggester">
    <str name="name">mySuggester</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">suggest_Manu</str>  <!-- the indexed field to derive suggestions from -->
    <str name="weightField">productId_meter</str>
    <str name="suggestAnalyzerFieldType">suggestAnalyzer</str>
    <str name="buildOnCommit">true</str>

  </lst>


  <lst name="suggester">

    <str name="name">mySuggester2</str>
    <str name="lookupImpl">AnalyzingInfixLookupFactory</str>
    <str name="dictionaryImpl">DocumentDictionaryFactory</str>
    <str name="field">suggest_Name</str>  <!-- the indexed field to derive suggestions from -->
    <str name="weightExpression">productId_meter</str>
    <str name="suggestAnalyzerFieldType">suggestAnalyzer</str>
    <str name="indexPath">path-of-system-dir/newSuggester2</str>
    <str name="buildOnCommit">true</str>

  </lst>

</searchComponent>