0

fl = fld1、fld2、fld3を使用して、solrから特定のフィールドを返すことができます。しかし、「。* _ attribute_group1」のような動的フィールド名を生成し、solrがすべてのグループを返すようにしたい場合があります。正規表現でsolr'fl'フィールドを拡張することは可能ですか?solrコードベースのどこを見ればよいですか?

4

1 に答える 1

1

Solr は、フィールド名 ( ) でワイルドカード パターンをサポートしていません"fl" param。ただし、独自のコンポーネントを作成して、リクエストを処理し、必要なインデックスに存在するフィールドのリストを識別することができます。

カスタムフィールドを実装するために検索コンポーネントを拡張する疑似コード..

// PSUEDO CODE
public class FLPatternCustomComponent extends SearchComponent {

    @Override
        //Gauranteed to be called before any other SearchComponent.process
    public void prepare(ResponseBuilder rb) throws IOException {
           SolrParams params = rb.req.getParams();
           //Input fl=field_*
           String[] inputFl = params.getParams(CommonParams.FL);
           Collection<String> existingFl = rb.req.getSearcher().getFieldNames();
           //process & find matching fields{
           SolrQuery newFields = new SolrQuery();
           newFields.set(CommonParams.FL, "field_1,field_2,field_3,field_4");
           AppendedSolrParams appendedParams = new AppendedSolrParams(params, q);
           rb.req.setParams(appendedParams);

           super.prepare(rb);
        }

    @Override
    public void process(ResponseBuilder rb) throws IOException {
        //Process request
        super.process(rb);
    }       
}

このコンポーネントを既存のリクエスト ハンドラーにチェーンするか、リクエスト ハンドラーを作成することができます。また、不変条件を追加することもできます。

カスタム コンポーネントとその処理の追加のパフォーマンス オーバーヘッドを考慮する必要がある場合があります。カスタムランキングとカスタムリクエストハンドラー用のカスタムコンポーネントをいくつか作成しましたが、問題なく使用できます。

Solr Plugin Developmentを確認してください。

于 2012-09-11T23:14:36.290 に答える