假设我从我的数据库中索引了以下内容:
======================================
| Id | Code | Description |
======================================
| 1 | A1 | Hello world |
| 2 | A1 | Hello world 123 |
| 3 | A1 | World hello hi |
| 4 | B1 | Quick fox jumped |
| 5 | B1 | Lazy dog |
...
此外,假设用户搜索“hello”,它应返回记录1,2和3.有没有办法让Solr“分组”到Code
字段并应用限制(例如, 10条记录)?我在寻找GROUP BY和LIMIT的SQL版本。
此外,当它执行“分组依据”时,我希望它选择最相关的文档,并将该文档的Description
字段用作返回的一部分。
当然,我可以让Solr将所有内容返回给我的应用程序,然后我可以操作结果来执行GROUP BY和LIMIT。如果可能的话,我宁愿不这样做。
答案 0 :(得分:12)
查看Solr 4.0中提供的field collapsing。对相关性组进行排序:group.sort=score desc
。
答案 1 :(得分:0)
注意:
响应: 开始 - >响应开始你的身份。 行 - >你怎么看行数。
Exp
1 step
&start=0&rows=3
2 step
&start=3&rows=3
3 step
&start=6&rows=3
etc.
{
"responseHeader":{
"status":0,
"QTime":1,
"params":{
"fl":"displayterm",
"indent":"true",
"start":"0",
"q":"displayterm:new",
"q.op":"and",
"group.field":"displayterm",
"group":"true",
"wt":"json",
"rows":"3"}},
"grouped":{
"displayterm":{
"matches":231,
"groups":[{
"groupValue":null,
"doclist":{"numFound":220,"start":0,"docs":[
{
"displayterm":"Professional News"}]
}},
{
"groupValue":"general",
"doclist":{"numFound":1,"start":0,"docs":[
{
"displayterm":"General News"}]
}},
{
"groupValue":"delhi",
"doclist":{"numFound":2,"start":0,"docs":[
{
"displayterm":"New Delhi"}]
}}]}}}
答案 2 :(得分:0)
将以下字段添加到您的查询
答案 3 :(得分:0)
实现所需目标的最简单方法是使用Solr分组功能,也称为“字段折叠”。您将必须在查询中添加以下参数:
group=true
-将打开分组模块group.field=Code
-这将告诉Solr应该在哪个字段上进行分组rows=10
-这将告诉Solr将唯一组的数量限制为最大10个。如果您想分页浏览,请使用rows
和start
参数。要控制组内部的结果,您可以使用group.limit
和group.offset
。
希望这会有所帮助:)