我正在编写一个自定义处理程序,其中我将运行多个查询,然后合并结果。目前,我遇到了一个问题,在处理程序中创建一个查询,我需要应用"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>
是否有可能在我的请求处理程序中对"query"对象应用分组以按id分组?
Query query = new WildcardQuery(new Term( "name", q ));
以便只返回2个文档?
我在网上到处搜索,我没有找到任何与我的问题相关的例子。
结果分组/字段折叠功能,作为Solr 3.3/4.0似乎是你正在寻找的。这允许您通过查询传递一个group.field
参数,例如:
&q=name:something&group=true&group.field=id