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 に注釈を付けることは可能ですか?

ネットで調べてみると、Spring Data Solr + SorlJ を使用した例はほとんど見つかりませんでした。

4

1 に答える 1

1

自分で定義した Bean としてハイライトを取得することは、SolrJ では不可能です。ただし、それらをマップとして取得できます

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 に答える