#java #solr #solrj
#java #solr #solrj
Вопрос:
Я пытаюсь получить ответ suggesterот Solr с помощью java, но я не могу получать ответ каждый раз, когда я запускаю код. Код:
SolrClient solrClient=new HttpSolrClient.Builder("http://localhost:/solr/core/").build();
SolrQuery sq = new SolrQuery();
sq.setRequestHandler("/suggest");
sq.set("suggest","true");
sq.set("suggest.build","true");
sq.set("suggest.dictionary","mySuggester");
sq.set("suggest.q",name);
QueryResponse rsp = solrClient.query(sq);
System.out.println(rsp.getSuggesterResponse().getSuggestedTerms());
List<String> types=rsp.getSuggesterResponse().getSuggestedTerms().get("mySuggester");
System.out.println(types);
Но когда я запускаю URL-адрес запроса в пользовательском интерфейсе Solr, используя:
http://localhost:8983/solr/core/suggest?suggest.dictionary=mySuggesteramp;suggest.q=stackamp;suggest =true amp;wt = json, я получаю вывод в виде (пример) :
{"responseHeader":{"status":0,"QTime":119},"suggest":{"mySuggester":{"stack":{"numFound":2,"suggestions":[{"term":"<b>Stack</b>overfolw","weight":0,"payload":""},{"term":"<b>Stack</b>overfolw advanced","weight":0,"payload":""}]}}}}
Когда я использую код SolrJ для извлечения предложенных терминов, я получаю [Stackoverfolw advanced,Stackoverfolw advanced] и несколько раз просто [] .
Я не понимаю, почему возникает эта проблема.
Заранее спасибо
Комментарии:
1. Похоже, что в вашем коде SolrJ suggest.build указан как ‘true’. Вероятно, время ожидания истекло при попытке построить индекс suggesterиндекс.
2. Спасибо за ответ. Можете ли вы объяснить, как решить проблему.
3. Попробуйте удалить
sq.set("suggest.build","true");
из кода SolrJ и посмотрите, есть ли у вас такая же проблема. Вы должны периодически создавать индекс suggesterв зависимости от того, как часто обновляется ваш индекс Solr, но не по обычному запросу.4. Я попробовал альтернативный вариант, но проблема по-прежнему сохраняется. В ответе нет терминов, но пользовательский интерфейс Solr содержит термины в ответе.
5. FWIW. Что я делаю в подобных ситуациях, так это нахожу способ получить запрос (из кода) в командной строке или find в файле журнала, а затем сравниваю. Часто я обнаруживаю, что способ, которым, как я думал, я строю запрос, на самом деле не соответствует тому, что я вижу при печати в командной строке или в файле журнала. Можете ли вы опубликовать на этой странице как URL-адрес из пользовательского интерфейса, так и строку, которая является результатом кода? (Я вижу строку URL выше, и если это то же самое, то это будет хорошо для сравнения.) Вы могли бы попробовать tail -f в файле журнала solr перед запуском кода, и я думаю, вы увидите, как это происходит там…