构建Solr自定义请求处理程序 - 应用组子句进行查询

时间:2013-04-01 17:53:15

标签: solr lucene

我正在编写一个自定义处理程序,在其中我将运行多个查询然后合并结果。目前我遇到了在Handler中创建查询的问题,我需要在其中应用“group by”子句......

这就是我创建查询的方式:

String q = params.get(CommonParams.Q);
...... 
Query myQuery = new WildcardQuery(new Term( "name", q )); 
...... 
ScoreDoc[] hits = searcher.search(myQuery , 100).scoreDocs; 

我的问题是:如何使用“q”变量并应用“group by”子句以便将结果分组?

示例:

我将以下内容编入索引:

<doc>
<filed name=id>001</field>
<filed name=name>foo</field>
<filed name=color>red</field>
</doc> 

<doc>
<filed name=id>001</field>
<filed name=name>foo</field>
<filed name=color>blue</field>
</doc>

<doc>
<filed name=id>002</field>
<filed name=name>bar</field>
<filed name=color>red</field>
</doc> 

<doc>
<filed name=id>002</field>
<filed name=name>bar</field>
<filed name=color>blue</field>
</doc>

是否可以将分组应用于请求处理程序内部的“查询”对象以按ID分组。

Query query = new WildcardQuery(new Term( "name", q ));

这样只返回2个文件?

我在网上到处搜索,我没有找到任何与我的问题相关的例子。

1 个答案:

答案 0 :(得分:1)

Solr 3.3 / 4.0中的Result Grouping / Field Collapsing功能似乎正是您所寻找的。这允许您使用查询传递group.field参数,例如:

&q=name:something&group=true&group.field=id
相关问题