我正在编写一个与Solr通信的Web应用程序,我正在使用Spring Data Solr + SolrJ来获取Java中的信息。
对于查询Sorl,我使用(e)DisMax有一些选项(现在,也许以后我需要添加其他东西):
SolrQuery query = new SolrQuery();
query.set("q", terms);
query.set("pf", "text^100");
query.set("qf", "text");
query.set("defType", "edismax");
query.setStart(pageable.getOffset());
query.setRows(pageable.getPageSize());
query.setHighlight(true).setHighlightSnippets(10);
query.setParam("hl.fl", "text");
对于这个结构,我用这种方式构建了一个bean
@SolrDocument
public class Document {
@Field
private String id;
@Field
private String text;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
}
我将执行查询:
response = solrTemplate.getSolrServer().query(query);
List<Document> beans = solrTemplate.convertQueryResponseToBeans(response, Document.class);
之后,在我的Document对象中,我只找到“id”和“text”。是否可以注释bean以获得突出显示?
在网上看,我发现使用Spring Data Solr + SorlJ的例子非常少。
答案 0 :(得分:1)
使用SolrJ不能将突出显示的内容检索为您自己定义的bean。不过,您可以将它们作为地图检索
QueryResponse response = solrTemplate.getSolrServer().query(query);
Map<String, Map<String, List<String>>> highlights = response.getHighlighting();
如果您不使用SolrJ方法,而是切换到Spring-Data / Spring-Boot启动程序,则可以:
HighlightQuery hq = new SimpleHighlightQuery(new Criteria(... enter search criteria...));
HighlightOptions hlOptions = new HighlightOptions().setNrSnipplets(maxSnippets)
hq.setHighlightOptions(hlOptions);
HighlightPage<SolrNewspaper> highlights = solrTemplate.queryForHighlightPage(mySolrCore, hq, MySolrDocument.class);
请注意,只有在返回默认的Solr高亮信息时,后者才可能。如果您对Solr中的突出显示进行了自定义,则可能无法使用。