【发布时间】:2018-10-23 01:39:35
【问题描述】:
我以驯服文本书为例,在solr中添加自定义QueryResponseWriter。但在wt 中没有显示为tah
当我点击以下查询时,会显示空响应
http://localhost:8983/solr/collectiona/type-ahead?q=fayes&wt=tah
在我的 solr 配置中,我放置了我的 lib 的以下 dir 路径
<lib dir="${solr.install.dir:../../../..}/contrib/customresponsewriter" regex=".*\.jar" />
我已经为此创建了一个 jar 文件,如书中所述。这是我的java类
public class TypeAheadResponseWriter implements QueryResponseWriter {
private Set<String> fields;
public void write(Writer writer, SolrQueryRequest solrQueryRequest, SolrQueryResponse solrQueryResponse) throws IOException {
SolrIndexSearcher searcher = solrQueryRequest.getSearcher();
NamedList namedList = solrQueryResponse.getValues();
int size = namedList.size();
for (int i = 0; i < size; i++) {
Object val = namedList.getVal(i);
if (val instanceof DocList) {
DocList docList = (DocList) val;
DocIterator docIterator = docList.iterator();
writer.append("<ul>\n");
while (docIterator.hasNext()) {
int id = docIterator.nextDoc();
Document doc = searcher.doc(id, fields);
String name = doc.get("title");
writer.append("<li>" + name + "</li>");
}
writer.append("</ul>\n");
}
}
}
public String getContentType(SolrQueryRequest solrQueryRequest, SolrQueryResponse solrQueryResponse) {
return "text/html;charset=UTF-8";
}
public void init(NamedList namedList) {
fields = new HashSet<String>();
fields.add("title");
}
}
这是我对 queryResponsewriter 的 solr 配置
<queryResponseWriter name="tah" class="cqw.TypeAheadResponseWriter"/>
<requestHandler name="/type-ahead" class="solr.SearchHandler">
<lst name="defaults">
<str name="wt">tah</str>
<str name="defType">dismax</str>
<str name="qf">title_prefix_typeahead^1.0</str>
</lst>
</requestHandler>
自定义库在 solr 启动时加载,这是我的 Solr 日志
向类加载器添加了 63 个库,来自路径:[/home/bibek/software/java/solr-7.3.0/contrib/clustering/lib, /home/bibek/software/java/solr-7.3.0/contrib /customresponsewriter, /home/bibek/software/java/solr-7.3.0/contrib/extraction/lib, /home/bibek/software/java/solr-7.3.0/contrib/langid/lib, /home/bibek/软件/java/solr-7.3.0/contrib/velocity/lib, /home/bibek/software/java/solr-7.3.0/dist]
【问题讨论】:
-
那么你是如何启用配置的呢?如果您使用集合,听起来就像您在云模式下运行 Solr - 在这种情况下,您必须上传和更新嵌入式 Zookeeper 实例中的配置。
-
@MatsLindh 我正在使用 solr 核心,我已将 solr 配置为经典 schema.xml 类型
-
你在服务器日志中看到 jar 被加载了吗?
-
如果您尝试使用响应编写器会发生什么?例外?没有? XML 输出?您的查询是什么?
-
啊,抱歉,错过了查询 - 但是您是否尝试在日志中添加一些调试信息?如果没有条目或您的 val 不是 DocList (您期望的 - 也许不是?)您不会向作者添加任何内容。将您的正常调试器附加到进程,使用可用的日志记录或至少添加打印语句(这些通常包含在日志文件中,具体取决于您的日志级别)。由于它没有抱怨也没有返回任何内容,它可能正在运行但没有触发任何写入。