Solrj 与 Solr Suggester
Posted
技术标签:
【中文标题】Solrj 与 Solr Suggester【英文标题】:Solrj with Solr Suggester 【发布时间】:2015-04-13 16:40:02 【问题描述】:使用 Solr Suggester 从 solrj 获取结果的正确方法是什么?
这是我的要求:
SolrQuery query = new SolrQuery();
query.setRequestHandler("/suggest");
query.setParam("suggest", "true");
query.setParam("suggest.build", "true");
query.setParam("suggest.dictionary", "mySuggester");
query.setParam("suggest.q", "So");
QueryResponse response = server.query(query);
但是我发现很难得到回复。我得到回复的方式是这样的:
NamedList obj = (NamedList)((Map)response.getResponse().get("suggest")).get("mySuggester");
SimpleOrderedMap obj2 = (SimpleOrderedMap) obj.get("So");
List<SimpleOrderedMap> obj3 = (List<SimpleOrderedMap>) obj2.get("suggestions");
这似乎对我从响应中获得的对象进行了很多假设,并且很难预测错误。
还有比这更好更干净的方法吗?
【问题讨论】:
【参考方案1】:在新版本中有一个SuggesterResponse:
https://lucene.apache.org/solr/5_3_1/solr-solrj/org/apache/solr/client/solrj/response/SuggesterResponse.html
【讨论】:
【参考方案2】:最好的选择是将它作为列表,下面的代码对我有用
HttpSolrClient solrClient = new HttpSolrClient(solrURL);
SolrQuery query = new SolrQuery();
query.setRequestHandler("/suggest");
query.setParam("suggest.q", "Ins");
query.setParam("wt", "json");
try
QueryResponse response = solrClient.query(query);
System.out.println(response.getSuggesterResponse().getSuggestedTerms());
List<String> types=response.getSuggesterResponse().getSuggestedTerms().get("infixSuggester");
System.out.println(types);
catch (SolrServerException | IOException e)
e.printStackTrace();
【讨论】:
【参考方案3】:您可以通过以下方式通过SpellCheckResponse
获得建议
SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse();
查看link了解更多详情
【讨论】:
我试过了,还是不行。它不是 SpellCheckResponse 对象。这是一个建议者cwiki.apache.org/confluence/pages/…,我认为这是不同的。以上是关于Solrj 与 Solr Suggester的主要内容,如果未能解决你的问题,请参考以下文章