2013-11-28 47 views
0

我试图使用Solr的(指数核心名称为“人”),以实现我的搜索引擎快速寻址功能都做在我的solrconfig.xml中进行以下配置更改:Solr的功能,事先键入的内容执行

<queryResponseWriter name="tah" 
class="com.sample.TypeAheadResponseWriter"/> 
<requestHandler name="/type-ahead" 
    class="solr.SearchHandler"> 
    <lst name="defaults"> 
     <str name="wt">tah</str> 
     <str name="defType">dismax</str> 
     <str name="qf"> wordPrefix^1.0 </str> 
    </lst> 
</requestHandler> 

我的架构文件中的字段

<field name="wordPrefix" type="prefix" /> 
<copyField source="name" dest="wordPrefix"/> 

下面是我com.sample.TypeAheadResponseWriter的内容

public class TypeAheadResponseWriter implements QueryResponseWriter { 
    private Set<String> fields; 

    @Override 
    public String getContentType(SolrQueryRequest req, SolrQueryResponse solrQueryResponse) { 
     return "text/html;charset=UTF-8"; 
    } 

    public void init(NamedList n) { 
     fields = new HashSet<String>(); 
     fields.add("word"); 
    } 

    @Override 
    public void write(Writer w, SolrQueryRequest req, SolrQueryResponse rsp) throws IOException { 
     SolrIndexSearcher searcher = req.getSearcher(); 
     NamedList nl = rsp.getValues(); 
     int sz = nl.size(); 
     for (int li = 0; li < sz; li++) { 
      Object val = nl.getVal(li); 
      if (val instanceof DocList) { 
       DocList dl = (DocList) val; 
       DocIterator iterator = dl.iterator(); 
       w.append("<ul>n"); 
       while (iterator.hasNext()) { 
        int id = iterator.nextDoc(); 
        Document doc = searcher.doc(id, fields); 
        String name = doc.get("name"); 
        w.append("<li>" + name + "</li>n"); 
       } 
       w.append("</ul>n"); 
      } 
     } 
    } 
} 

但我没有得到在击中URL

http://<hostname>:8983/solr/people/type-ahead?q=Reb. 

但是,当我在solrconfig.xml中的重量值更改为JSON,它做得到响应任何回应。我尽可能地尝试了一切。不知道我哪里错了。

回答

0

我想,麻烦位于:

if (val instanceof DocList) { 

让我们来看看最后一行从QueryComponent.process

ResultContext ctx = new ResultContext(); 
ctx.docs = rb.getResults().docList; 
ctx.query = rb.getQuery(); 
rsp.add("response", ctx); 

所以DocList位于rsp.getValues().get("response").docs

+0

感谢。有效 :) – Ankit