5

我正在编写一个与 Solr 通信的 Web 应用程序,并且我正在使用 Spring Data Solr + SolrJ 来获取 Java 中的信息。

对于 Solr 查询,我使用 (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 进行注释以获取Highlight

在网上看,我发现使用 Spring Data Solr + SorlJ 的例子很少。

4

1 回答 1

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 中的突出显示进行了自定义,它可能无法正常工作。

于 2020-09-28T07:44:37.297 回答