Не удалось прочитать результаты SuggestComponent с помощью SolrJ API

Я использую SuggestComponent для автоматического предложения ключевых слов. Я правильно настроил компонент поиска и обработчик запросов в solrconfig.xml. Я также получаю ожидаемые результаты.

Теперь моя проблема в том, что я не могу читать вывод XML с помощью API SolrJ. Я потратил пару часов на SolrJ API, но не смог найти способ прочитать предлагаемые ключевые слова.

Мой Java-код

SolrServer server = //solrserver object creation
ModifiableSolrParams params = new ModifiableSolrParams();
params.set("qt", "/suggest");
params.set("q", q);
QueryResponse rsp = server.query(params);
**//How to read from QueryResponse?**

Вот моя конфигурация solrconfig.xml

<searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
      <str name="name">mySuggester</str>
      <str name="lookupImpl">AnalyzingInfixLookupFactory</str>      
      <str name="dictionaryImpl">DocumentDictionaryFactory</str>    
      <str name="field">name</str>
      <str name="weightField">reviewsNum</str>
      <str name="suggestAnalyzerFieldType">text_general</str>
      <str name="buildOnCommit">true</str>
    </lst>
  </searchComponent>

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

Ответ:

<response>
<lst name="responseHeader">
<int name="status">0</int>
<int name="QTime">24</int>
</lst>
<lst name="suggest">
<lst name="mySuggester">
<lst name="a">
<int name="numFound">10</int>
<arr name="suggestions">
<lst>
<str name="term">JNTU <b>A</b>nantapur</str>
<long name="weight">2</long>
<str name="payload"/>
</lst>
<lst>
<str name="term"><b>A</b>merican School of Bombay</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">
Society For <b>A</b>dvanced Study In Rehabilitation
</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term"><b>a</b>mrita vishwa vidyapeetham</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">
shanmugha <b>a</b>rts science technology & research <b>a</b>cademy (sastra)
</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">Montesorri Hs <b>A</b>lampur</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term"><b>A</b>ditya Ps Nehru Road Proddutur</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">Zphs <b>A</b>rakatavemula Rajupalem</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">Sri <b>A</b>ditya Ps,pamur Pamuru</str>
<long name="weight">1</long>
<str name="payload"/>
</lst>
<lst>
<str name="term">
ramakrishna mission vivekananda educational <b>a</b>nd research institute
</str>
<long name="weight">0</long>
<str name="payload"/>
</lst>
</arr>
</lst>
</lst>
</lst>
</response>

person user475627    schedule 21.12.2014    source источник
comment
Для временного исправления я читаю так. Ключевые слова List‹String› = new ArrayList‹String›(); NamedList‹Object› data = rsp.getResponse(); LinkedHashMap SpellInfo = (LinkedHashMap)data.getVal(1); SimpleOrderedMap sugg = (SimpleOrderedMap)spellInfo.get(mySuggester); Предложения SimpleOrderedMap = (SimpleOrderedMap)sugg.get(q); Список ArrayList = (ArrayList)suggestions.get(предложения); for(int i=0;i‹list.size();i++){ SimpleOrderedMap o = (SimpleOrderedMap)list.get(i); Строковое ключевое слово = o.get(term).toString(); keywords.add(ключевое слово); }   -  person user475627    schedule 25.12.2014


Ответы (1)


Вам потребуется доступ к SpellCheckResponse свойство ответа:

rsp.getSpellCheckResponse()

Это возвращает объект SpellCheckResponse, который содержит getSuggestions(), который, в свою очередь, возвращает список SpellCheckResponse.Suggestion.

List<SpellCheckResponse.Suggestion> suggestions = rsp.getSpellCheckResponse().getSuggestions()

Вы также хотите использовать setRequestHandler("/suggest"), а не параметр qt.

person MatsLindh    schedule 21.12.2014
comment
rsp.getSpellCheckResponse() дает ноль. но rsp.getResponse() предоставляет данные. - person user475627; 21.12.2014
comment
MatsLindh, здесь я не использую класс SpellCheckComponent, а использую класс SuggestComponent. Так что все же метод response.getSpellCheckResponse() даст результаты? - person user475627; 21.12.2014