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