2016-11-23 1 views
0

Это следующий вопрос: this question. У меня есть список городов, на которых я хочу реализовать проверку орфографии. У меня есть приоритеты/веса этих городов со мной. Я попытался реализация solrsuggester с FileDictionaryFactory в качестве основы в следующем формате:Не удалось получить данные в экзаменаторе, даже если storeDir создается, созданным FileDictionaryFactory

<city-name> <TAB> <weight> <TAB> <other parameters like citycode,country> 

Я передаю другие атрибуты, как CityCode, страна и т.д., как труба отделена полезная нагрузка строки.

Вот мой solrconfig

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
     <str name="name">mySuggester</str> 
     <str name="lookupImpl">FuzzyLookupFactory</str>  
     <str name="dictionaryImpl">FileDictionaryFactory</str>  
     <str name="field">name</str> 
     <str name="weightField">searchscore</str> 
     <str name="suggestAnalyzerFieldType">string</str> 
     <str name="buildOnStartup">false</str> 
     <str name="sourceLocation">spellings.txt</str> 
     <str name="storeDir">autosuggest_dict</str> 
    </lst> 
    </searchComponent> 

    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
     <str name="suggest">true</str> 
     <str name="suggest.count">10</str> 
     <str name="suggest.dictionary">mySuggester</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
    </requestHandler> 

и моя схема

<field name="name" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="countrycode" type="string" indexed="true" stored="true" multiValued="false" /> 
<field name="latlng" type="location" indexed="true" stored="true" multiValued="false" /> 
<field name="searchfield" type="text_ngram" indexed="true" stored="false" multiValued="true" omitNorms="true" omitTermFreqAndPositions="true" /> 

<uniqueKey>id</uniqueKey> 
<defaultSearchField>searchfield</defaultSearchField> 
<solrQueryParser defaultOperator="OR"/> 
<copyField source="name" dest="searchfield"/> 

Теперь проблема я облицовкой я получаю для каждого поискового запроса 0 результатов. Несмотря на то, что я вижу, что созданный storeDir создается, и у него есть файл bin, данные которого похожи на мои данные полезной нагрузки.

Это формат URL я использую

/suggest?suggest=true&suggest.dictionary=mySuggester&wt=json&suggest.q=cologne 

Итак, у меня есть следующие вопросы:

  1. Что означает создание storeDir означающие? Успешно ли он проиндексирован
  2. Если да, то что случилось с моим запросом? Если нет, я что-то упустил (indexPath ???).
  3. Правильно ли задавать параметры поиска на поле полезной нагрузки? Если нет, есть ли другой способ?

ответ

0

Я использовал поисковое поле как defaultSearchField в схеме, но настроил имя как поле подсказки. В тот момент, когда я сменил поле на searchfield и предложилAnalyzerFieldType для text_ngram, он начал работать.

Вот рабочий solrconfig:

<searchComponent name="suggest" class="solr.SuggestComponent"> 
     <lst name="suggester"> 
       <str name="name">suggestions</str> 
       <str name="lookupImpl">FuzzyLookupFactory</str> 
       <str name="dictionaryImpl">FileDictionaryFactory</str> 
       <str name="field">searchfield</str> 
       <str name="weightField">searchscore</str> 
       <str name="suggestAnalyzerFieldType">text_ngram</str> 
       <str name="buildOnStartup">false</str> 
       <str name="buildOnCommit">false</str> 
       <str name="sourceLocation">spellings.txt</str> 
       <str name="storeDir">autosuggest_dict</str> 
     </lst> 
</searchComponent> 

    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
     <lst name="defaults"> 
       <str name="suggest">true</str> 
       <str name="suggest.count">10</str> 
       <str name="suggest.dictionary">suggestions</str> 
       <str name="suggest.dictionary">results</str> 
     </lst> 
     <arr name="components"> 
       <str>suggest</str> 
     </arr> 
    </requestHandler> 
0

В вашем файле solrconfig.xml есть небольшие изменения. вам нужно удалить buildOnStartup из конфигурации рекомендателя или установить его true.
[solrconfig.xml]

<searchComponent name="suggest" class="solr.SuggestComponent"> 
    <lst name="suggester"> 
     <str name="name">mySuggester</str> 
     <str name="lookupImpl">FuzzyLookupFactory</str>  
     <str name="dictionaryImpl">FileDictionaryFactory</str>  
     <str name="field">name</str> 
     <str name="weightField">searchscore</str> 
     <str name="suggestAnalyzerFieldType">string</str> 
     <str name="buildOnStartup">true</str> 
     <str name="sourceLocation">spellings.txt</str> 
     <str name="storeDir">autosuggest_dict</str> 
    </lst> 
    </searchComponent> 
    <requestHandler name="/suggest" class="solr.SearchHandler" startup="lazy"> 
    <lst name="defaults"> 
     <str name="suggest">true</str> 
     <str name="suggest.count">10</str> 
     <str name="suggest.dictionary">mySuggester</str> 
    </lst> 
    <arr name="components"> 
     <str>suggest</str> 
    </arr> 
    </requestHandler> 

Существует проблема в основе Suggester файла, что она не будет строить свои предложения через запрос, установив предложить = верно. Вам необходимо создать основанное на файлах предложение при запуске.

Смежные вопросы