【问题标题】:Solr Grouping and Unique valuesSolr 分组和唯一值
【发布时间】:2020-07-01 15:13:06
【问题描述】:

我正在尝试找到一种方法来获取基于组的唯一值。想法是按 id 分组,然后返回该分组值。

查询参数 fl=valueIwant+myID&group=true&group.field=myId&q=

 "grouped": {
     "myID": {
         "matches": 7520236,
         "groups": [{
                 "groupValue": "123456",
                 "doclist": {
                     "numFound": 6583,
                     "start": 0,
                     "docs": [{
                         "myID": 123456,
                         "valueIwant": "Hello World"
                     }]
                 }
             }
         ]
     }
 }

这很好,但我想做的是以不同的方式选择“valueIwant”。 group.limit 将在文档中返回更多值,但它不会是唯一的。有没有办法限制 group.limit 只返回唯一的 fl 值?对于上述示例,找到了 6583。我必须将限制扩大到 6583,然后通过独特的方式将其缩小。当我有 700 个唯一 ID 并且我想将其与总共 4400 万个文档进行分组时,情况会变得更加复杂。

例如。如果我这样做了

fl=valueIwant+myID&group.limit=3&group=true&group.field=myId&q=

         "grouped": {
         "myID": {
             "matches": 7520236,
             "groups": [{
                     "groupValue": "123456",
                     "doclist": {
                         "numFound": 6583,
                         "start": 0,
                         "docs": [{
                             "myID": 123456,
                             "valueIwant": "Hello World"
                         },
                         {
                             "myID": 123456,
                             "valueIwant": "Hello World"
                         }
                         {
                             "myID": 123456,
                             "valueIwant": "Hello World123456"
                         }]]
                     }
                 }
             ]
         }
     }

我想要的是文档对 valueIwant 来说是独一无二的

     "grouped": {
     "myID": {
         "matches": 7520236,
         "groups": [{
                 "groupValue": "123456",
                 "doclist": {
                     "numFound": 6583,
                     "start": 0,
                     "docs": [{
                         "myID": 123456,
                         "valueIwant": "Hello World"
                     },
                     {
                         "myID": 123456,
                         "valueIwant": "Hello Planet"
                     }
                     {
                         "myID": 123456,
                         "valueIwant": "Hello World123456"
                     }]]
                 }
             }
         ]
     }
 }

有没有办法做到这一点?我正在查看函数,但找不到我需要的任何东西。

谢谢,

-小贩

【问题讨论】:

  • 你能用多层次分面解决这个问题吗?这会给你123456: {"Hello world": .., "Hello World123456": ..., "Hello Planet": ...} 并且没有重复。
  • 是的,我想我通过 facet.pivot 功能获得了它。确定后我会发布我的解决方案

标签: solr solrcloud


【解决方案1】:

我可以通过分面枢轴来做到这一点。之后最困难的事情是解析响应,因为它作为一个非常嵌套的对象返回。你可以在这里看到我的第一个解决方案Dynamically traversing a deep nested object and accumulating results 和我关于让它更“动态”的问题

facet: true,
  'facet.mincount': 1,
  'facet.sort': 'index',
  'facet.limit': 5,
  'facet.pivot': 'pivotvalue0, pivotvalue1, pivotvalue2, pivotvalue3'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多