Solr与索尔建议者

时间:2015-02-12 19:24:27

标签: java solr solrj

使用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");

这似乎假设了很多关于我从响应中获得的对象,并且很难预测错误。

有没有比这更好更清洁的方式?

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

最好的选择是将它作为List,下面代码为我工作

    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();
    }

答案 2 :(得分:0)

您可以通过SpellCheckResponse通过以下方式获取建议

SpellCheckResponse spellCheckResponse=response.getSpellCheckResponse();

查看此link了解详情