我可以使用 fl=fld1,fld2,fld3 从 solr 返回特定字段。但有时我会生成动态字段名称,如“.*_attribute_group1”,并希望 solr 返回所有组。是否可以使用正则表达式扩展 solr 'fl' 字段?在哪里查看 solr 代码库?
问问题
161 次
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 回答