2016-04-01 4 views
0

Ich versuche einen solr suggester mit einem solr 4.6.0 und einem tomcat7 zu bauen. Der Suggester sollte mehrere Felder aus dem Solr (suName, suFea) und einem dateibasierten Wörterbuch (suList) verwenden. Der Vorschlag mit mehreren Feldern funktioniert. Aber die Kombination aus Feld und einem Dateiwörterbuch funktioniert nicht, weil der Analysator den gleichen Typ von jedem Wörterbuch benötigt. Ich habe versucht, das Problem mit mehreren Komponenten zu beheben. Das Ergebnis war ein Nullzeiger.Solr Autocomplete: Mehrere Wörterbücher mit Feld- und Dateiwörterbuch

Gibt es eine Möglichkeit, eine solche Situation zu erstellen?

Danke.

solrconfig.xml:

<searchComponent name="suggest" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
    <str name="name">suFea</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str> 
    <str name="suggestAnalyzerFieldType">lowercase</str> 
    <str name="field">features</str> 
    <str name="buildOnCommit">true</str> 
    </lst> 
    <lst name="spellchecker"> 
    <str name="name">suName</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str> 
    <str name="suggestAnalyzerFieldType">lowercase</str> 
    <str name="field">name</str> 
    <!--<float name="threshold">0.005</float>--> 
    <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 
<searchComponent name="fileSuggest" class="solr.SpellCheckComponent"> 
    <lst name="spellchecker"> 
    <str name="name">suList</str> 
    <str name="classname">org.apache.solr.spelling.suggest.Suggester</str> 
    <str name="lookupImpl">org.apache.solr.spelling.suggest.fst.WFSTLookupFactory</str> 
    <str name="suggestAnalyzerFieldType">lowercase</str> 
    <str name="sourceLocation">./suggester/dict.txt</str> 
    <str name="fieldType">string</str> 
    <!--<float name="threshold">0.005</float>--> 
    <str name="buildOnCommit">true</str> 
    </lst> 
</searchComponent> 

<requestHandler name="/suggest" class="solr.SearchHandler"> 
    <lst name="defaults"> 
    <str name="echoParams">explicit</str> 
    <str name="spellcheck">true</str> 
    <str name="spellcheck.dictionary">suName</str> 
    <str name="spellcheck.dictionary">suFea</str> 
    <str name="spellcheck.dictionary">suList</str> 
    <str name="spellcheck.onlyMorePopular">true</str> 
    <str name="spellcheck.collate">false</str> 
    <str name="spellcheck.count">25</str> 
    </lst> 
    <arr name="components" > 
    <str>suggest</str> 
    <str>fileSuggest</str> 
    </arr> 
</requestHandler> 

Fehler:

java.lang.NullPointerException at org.apache.solr.spelling.ConjunctionSolrSpellChecker.addChecker(ConjunctionSolrSpellChecker.java:58) at 
org.apache.solr.handler.component.SpellCheckComponent.getSpellChecker(SpellCheckComponent.java:505) at 
org.apache.solr.handler.component.SpellCheckComponent.prepare(SpellCheckComponent.java:123) at 
org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:187) at 
org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:135) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1859) at 
org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:710) at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:413) at 
org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:197) at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at 
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at 
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at 
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at 
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316) at 
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at 
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) 

Antwort

0

Ich bin mit solr 6.2.0 Version

und deutlich mehr suggester Arbeit für mich solrconfig.xml Config wie folgt und Managed-Schema.xml-Konfiguration darunter. wenn u wollen, kann ich hier Java-Code teilen zu

************************** solrconfig.xml CONFIG ****** ********************

<searchComponent class="solr.SuggestComponent" name="suggest"> 
<lst name="suggester"> 
<str name="name">ilsuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">IL_ADI</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">ilcesuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">ILCE_ADI</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/ilcesuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">mahallesuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">MAHALLE_ADI</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/mahallesuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 

</lst> 

<lst name="suggester"> 
<str name="name">sokaksuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">SOKAK</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/sokaksuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">caddesuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">CADDE</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/caddesuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">yolsuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">YOL_ADI</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/yolsuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 


<lst name="suggester"> 
<str name="name">kapinosuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">KAPI_NO</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/kapinosuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 

<lst name="suggester"> 
<str name="name">kapiadisuggester</str> 
<str name="lookupImpl">FuzzyLookupFactory</str> 
<str name="dictionaryImpl">DocumentDictionaryFactory</str> 
<str name="field">KAPI_ADI</str> 
<str name="suggestAnalyzerFieldType">textgen</str> 
<str name="indexPath">suggestions/kapiadisuggester</str> 
<str name="storeDir">suggest_fuzzy_doc_expr_dict</str> 
<str name="preserveSep">true</str> 
<str name="preservePositionIncrements">true</str> 
<str name="exactMatchFirst">true</str> 
<float name="threshold">0.005</float> 
<str name="buildOnStartup">false</str> 
<str name="buildOnCommit">false</str> 
</lst> 


</searchComponent> 

<requestHandler class="solr.SearchHandler" name="/suggest"> 
<lst name="defaults"> 
<str name="spellcheck">true</str> 
<str name="suggest">true</str> 
<str name="suggest.dictionary">ilsuggester</str> 
<str name="suggest.dictionary">ilcesuggester</str> 
<str name="suggest.dictionary">mahallesuggester</str> 
<str name="suggest.dictionary">sokaksuggester</str> 
<str name="suggest.dictionary">caddesuggester</str> 
<str name="suggest.dictionary">yolsuggester</str> 
<str name="suggest.dictionary">kapinosuggester</str> 
<str name="suggest.dictionary">kapiadisuggester</str> 

<str name="spellcheck.count">10</str> 

</lst> 
<arr name="components"> 
<str>suggest</str> 
</arr> 
</requestHandler> 


<field name="CADDE" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="ILCE_ADI" type="text_general" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="IL_ADI" type="text_general" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="KAPI_ADI" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="MAHALLE_ADI" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="SOKAK" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<field name="YOL_ADI" type="textgen" omitNorms="true" omitTermFreqAndPositions="true" multiValued="true" indexed="true" stored="true"/> 

<fieldType name="textgen" class="solr.TextField" positionIncrementGap="100"> 
<analyzer type="index"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="0"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
<analyzer type="query"> 
<tokenizer class="solr.WhitespaceTokenizerFactory"/> 
<filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
<filter class="solr.StopFilterFactory" 
     ignoreCase="true" 
     words="stopwords.txt" 

     /> 
<filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="0"/> 
<filter class="solr.LowerCaseFilterFactory"/> 
</analyzer> 
</fieldType>