solrj";org.apache.solr.common.util.SimpleOrderedMap不能强制转换为java.util.Map“;使用“时的例外情况”/建议;处理者

solrj";org.apache.solr.common.util.SimpleOrderedMap不能强制转换为java.util.Map“;使用“时的例外情况”/建议;处理者,java,solr,solrj,Java,Solr,Solrj,我在尝试使用/suggest处理程序运行solrj程序时遇到类强制转换异常。我能够从Solr Admin UI获得建议响应,但是当从solrj客户端尝试相同的响应时,会出现上述异常 solr-config.xml条目如下所示: <searchComponent name="suggest" class="solr.SuggestComponent"> <lst name="suggester"> <str name="name"&g

我在尝试使用/suggest处理程序运行solrj程序时遇到类强制转换异常。我能够从Solr Admin UI获得建议响应,但是当从solrj客户端尝试相同的响应时,会出现上述异常

solr-config.xml条目如下所示:

 <searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
            <str name="name">mySuggester</str>
            <str name="lookupImpl">FuzzyLookupFactory</str>
            <str name="dictionaryImpl">DocumentDictionaryFactory</str>
            <str name="field">suggestfield</str>
            <str name="suggestAnalyzerFieldType">text_general</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>
 String url = "http://localhost:8983/solr/testwidget"; 
    HttpSolrClient client = new HttpSolrClient.Builder(url).build();
    client.setParser(new XMLResponseParser());

    SolrQuery query = new SolrQuery();
    query.setRequestHandler("/suggest");
    query.setParam("suggest.build", true);
    query.setParam("suggest", true);
    query.setParam("suggest.dictionary", "mySuggester");
    query.setParam("suggest.q", "acc");

    QueryResponse response = client.query(query);
  System.out.println(response.getSuggesterResponse().getSuggestedTerms());
 Exception in thread "main" java.lang.ClassCastException: org.apache.solr.common.util.SimpleOrderedMap cannot be cast to java.util.Map
    at org.apache.solr.client.solrj.response.QueryResponse.setResponse(QueryResponse.java:161)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)
    at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:942)
    at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:957)
    at com.intellectdesign.canvas.solr.SolrjTest.main(SolrjTest.java:41)
例外情况如下:

 <searchComponent name="suggest" class="solr.SuggestComponent">
    <lst name="suggester">
            <str name="name">mySuggester</str>
            <str name="lookupImpl">FuzzyLookupFactory</str>
            <str name="dictionaryImpl">DocumentDictionaryFactory</str>
            <str name="field">suggestfield</str>
            <str name="suggestAnalyzerFieldType">text_general</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>
 String url = "http://localhost:8983/solr/testwidget"; 
    HttpSolrClient client = new HttpSolrClient.Builder(url).build();
    client.setParser(new XMLResponseParser());

    SolrQuery query = new SolrQuery();
    query.setRequestHandler("/suggest");
    query.setParam("suggest.build", true);
    query.setParam("suggest", true);
    query.setParam("suggest.dictionary", "mySuggester");
    query.setParam("suggest.q", "acc");

    QueryResponse response = client.query(query);
  System.out.println(response.getSuggesterResponse().getSuggestedTerms());
 Exception in thread "main" java.lang.ClassCastException: org.apache.solr.common.util.SimpleOrderedMap cannot be cast to java.util.Map
    at org.apache.solr.client.solrj.response.QueryResponse.setResponse(QueryResponse.java:161)
    at org.apache.solr.client.solrj.SolrRequest.process(SolrRequest.java:194)
    at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:942)
    at org.apache.solr.client.solrj.SolrClient.query(SolrClient.java:957)
    at com.intellectdesign.canvas.solr.SolrjTest.main(SolrjTest.java:41)

我不知道为什么它会设置
XMLResponseParser
,然后请求
wt=json
。我想可以作为开始的样本

我不知道为什么它会设置
XMLResponseParser
,然后请求
wt=json
。我想可以作为开始的样本

为建议者使用多值字段有意义吗?它建议哪一个?copyField指令将在单个字段中放置多个文本块


你想要什么结果?这种设计对我来说毫无意义。

对建议者使用多值字段有意义吗?它建议哪一个?copyField指令将在单个字段中放置多个文本块

你想要什么结果?这种设计对我来说毫无意义。

问题“org.apache.solr.common.util.SimpleOrderedMap无法转换为java.util.Map”的原因在下面的代码片段中

if ( "suggest".equals( n ) )  {
        _suggestInfo = (Map<String,NamedList<Object>>) res.getVal( i );
        extractSuggesterInfo(_suggestInfo);
      }
if(“建议”。等于(n)){
_suggestInfo=(Map)res.getVal(i);
extractSuggesterInfo(_SuggesterInfo);
}
执行此操作的类是“org.apache.solr.client.solrj.response”包下的“QueryResponse”,该包内置于solrj中

在我的例子中,我使用Rest客户端执行了建议操作

import org.springframework.web.client.RestTemplate;
final RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8983/solr/{core}/suggest?q={term}";
Map<Map<?, ?>, Map<?, ?>> forNow = restTemplate.getForObject(url, HashMap.class);
导入org.springframework.web.client.restemplate;
最终RestTemplate RestTemplate=新RestTemplate();
字符串url=”http://localhost:8983/solr/{core}/suggest?q={term}”;
Map>forNow=restemplate.getForObject(url,HashMap.class);
问题“org.apache.solr.common.util.SimpleOrderedMap无法转换为java.util.Map”的原因在下面的代码片段中

if ( "suggest".equals( n ) )  {
        _suggestInfo = (Map<String,NamedList<Object>>) res.getVal( i );
        extractSuggesterInfo(_suggestInfo);
      }
if(“建议”。等于(n)){
_suggestInfo=(Map)res.getVal(i);
extractSuggesterInfo(_SuggesterInfo);
}
执行此操作的类是“org.apache.solr.client.solrj.response”包下的“QueryResponse”,该包内置于solrj中

在我的例子中,我使用Rest客户端执行了建议操作

import org.springframework.web.client.RestTemplate;
final RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8983/solr/{core}/suggest?q={term}";
Map<Map<?, ?>, Map<?, ?>> forNow = restTemplate.getForObject(url, HashMap.class);
导入org.springframework.web.client.restemplate;
最终RestTemplate RestTemplate=新RestTemplate();
字符串url=”http://localhost:8983/solr/{core}/suggest?q={term}”;
Map>forNow=restemplate.getForObject(url,HashMap.class);

是的,这是一个错误。“request wt=json”被用于其他目的。问题仍然存在。是的,这是一个错误。“request wt=json”被用于其他目的。问题仍然存在。将其设置为copyField的原因不是从单个字段而是从多个字段获取建议。由于这是一个建议领域,建议需要来自各个领域,而不仅仅是一个领域。正如官方文件“要用作建议的基础,必须存储该字段。您可能希望使用copyField规则创建一个特殊的“建议”字段,该字段由文档中其他字段的术语组成建议字段可以是copyField。将其设置为copyField的原因不是从单个字段而是从多个字段获取建议。由于这是一个建议领域,建议需要来自各个领域,而不仅仅是一个领域。正如官方文件“要用作建议的基础,必须存储字段。您可能希望使用copyField规则创建一个特殊的“建议”字段,该字段由文档中其他字段的术语组成。”建议字段可以是copyField。