是否可以通过solr中的特定模式请求字段?

时间:2012-09-11 19:22:19

标签: java solr

我可以使用fl = fld1,fld2,fld3来从solr返回特定字段。但有时我生成动态字段名称,如“。* _ attribute_group1”,并希望solr返回所有组。 用regexp扩展solr'fl'字段是否可行?在solr代码库中查看哪里?

1 个答案:

答案 0 :(得分:1)

Solr不支持字段名称中的通配符模式("fl" param)。但是你可以编写自己的组件来处理请求&识别索引中存在的文件列表。

Pesudo扩展搜索组件以实现自定义字段的代码..

// 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);
    }       
}

您可以将此组件链接到现有的请求处理程序或创建您的请求处理程序&amp;也许您还可以添加任何其他不变量。

您可能需要考虑自定义组件的任何额外性能开销。它的处理。我已经为自定义排名创建了几个自定义组件。自定义请求处理程序&amp;使用它没有太多问题。

您可能需要查看Solr Plugin Development