zoukankan      html  css  js  c++  java
  • Result Grouping / Field Collapsing-结果分组

    WiKi:http://wiki.apache.org/solr/FieldCollapsing

    Introduction

      字段折叠和结果分组是考虑相同solr功能的两种不同的方式.

      字段折叠折叠一组具有相同字段值的结果到一个单个(或固定数量)的条目(实体)中.例如,大多数搜索引擎如谷歌聚合站点,所以只有一个或两个条目显示,然后点击这个站点连接,用户可以查阅来自这个站点的更多结果.字段折叠还具有抑制重复的文件的功能.

      结果分组使用普通的字段值将文档分为多组.返回每组文档的前几个文档.一个常见的例子就是搜索购买率比较高的term,如DVD,这里展示了每组分类("TVs & Video","Movies","Computers"等)的前3个结果.

    Quick Start  

      现在我们发送一个查询请求给solr,然后打开结果分组,我们首先试着对manu_exact字段分组,你目前只能分组为单值字段:

      ...&q=solr+memory&group=true&group.field=manu_exact

    返回分组响应结果:

    [...]
      "grouped":{
        "manu_exact":{
          "matches":6,
          "groups":[{
              "groupValue":"Apache Software Foundation",
              "doclist":{"numFound":1,"start":0,"docs":[
                  {
                    "id":"SOLR1000",
                    "name":"Solr, the Enterprise Search Server"}]
              }},
            {
              "groupValue":"Corsair Microsystems Inc.",
              "doclist":{"numFound":2,"start":0,"docs":[
                  {
                    "id":"VS1GB400C3",
                    "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail"}]
              }},
            {
              "groupValue":"A-DATA Technology Inc.",
              "doclist":{"numFound":1,"start":0,"docs":[
                  {
                    "id":"VDBDB1A16",
                    "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM"}]
              }},
            {
              "groupValue":"Canon Inc.",
              "doclist":{"numFound":1,"start":0,"docs":[
                  {
                    "id":"0579B002",
                    "name":"Canon PIXMA MP500 All-In-One Photo Printer"}]
              }},
            {
              "groupValue":"ASUS Computer Inc.",
              "doclist":{"numFound":1,"start":0,"docs":[
                  {
                    "id":"EN7800GTX/2DHTV/256M",
                    "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)"}]
              }}]}}

      响应表面总共有6个结果匹配.对于每个group.field的唯一值,都会返回一个doc集合,默认包含第一个最高得分文档返回.这个文档集合(docList)同样给出了分组的文档总数--numFound.这些组同样按照他们每组内的第一个文档的得分排序.

      我们也可以使用group.query命令(和facet.query命令很像)按查询分组文档.例如,我们可以找到不同价格范围的前3个文档.

    ...&q=memory&group=true&group.query=price:[0 TO 99.99]&group.query=price:[100 TO *]&group.limit=3

    [...]
      "grouped":{
        "price:[0 TO 99.99]":{
          "matches":5,
          "doclist":{"numFound":1,"start":0,"docs":[
              {
                "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
                "price":74.99}]
          }},
        "price:[100 TO *]":{
          "matches":5,
          "doclist":{"numFound":3,"start":0,"docs":[
              {
                "name":"Canon PIXMA MP500 All-In-One Photo Printer",
                "price":179.99},
              {
                "name":"CORSAIR  XMS 2GB (2 x 1GB) 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) Dual Channel Kit System Memory - Retail",
                "price":185.0},
              {
                "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)",
                "price":479.95}]
          }}
    [...]

      从上面的响应我们可以看出有5个结果匹配了基础查询"memory",其中,一个价格在$100以下,3个在$100以上,这加起来不够5个,这是因为有一个文档没有价格,因此,这个文档不匹配任何一个分组查询.

      通过参数group.main=true,我们可以选择性的使用分组结果作为"main"结果.尽管这个结果没有太多信息,但是它比较容易让客户端解析数据.

    ...&q=solr+memory&group=true&group.field=manu_exact&group.main=true

     "response":{"numFound":6,"start":0,"docs":[
          {
            "id":"SOLR1000",
            "name":"Solr, the Enterprise Search Server",
            "manu":"Apache Software Foundation"},
          {
            "id":"VS1GB400C3",
            "name":"CORSAIR ValueSelect 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - Retail",
            "manu":"Corsair Microsystems Inc."},
          {
            "id":"VDBDB1A16",
            "name":"A-DATA V-Series 1GB 184-Pin DDR SDRAM Unbuffered DDR 400 (PC 3200) System Memory - OEM",
            "manu":"A-DATA Technology Inc."},
          {
            "id":"0579B002",
            "name":"Canon PIXMA MP500 All-In-One Photo Printer",
            "manu":"Canon Inc."},
          {
            "id":"EN7800GTX/2DHTV/256M",
            "name":"ASUS Extreme N7800GTX/2DHTV (256 MB)",
            "manu":"ASUS Computer Inc."}]
      }

    Request Parameters

    group:           参数值true/false 打开关闭分组.

    group.field :   参数值:字段名称,基于字段唯一的值来分组的.这个字段必须是单值字段,并且是必须被索引的字段.

    group.func:    参数值:查询函数,这个参数支持版本4.0以上的.

    group.query:    参数值:查询,这是基于查询的分组.

    rows:        参数值:number,返回分组的组数.

    start:       参数值:number,结果分组集合的偏移量.

    group.limit:    参数值:number,每组返回的结果数.默认是1.

    group.offset:  参数值:number,每组返回的起始偏移量.

    sort:        参数值:[sortspec],如何对分组排序,例如,sort=popularity desc将导致分组按照每组最高人气的文档排序.默认是"score desc".

    group.sort:     参数值:[sortspec],如果在组内排序文档,默认值和sort参数一样.

    group.format:    参数值:grouped/simple,如果simple,分组的文档展现成一个单独的平面列表.这时候start和rows参数关联的就是文档的数量了,不再是分组的组数量.

    group.main:   参数值:true/false,如果为true,最后一个字段的分组结果将被作为响应的主结果列表.使用group.format=simple.

    group.ngroups:  参数值:true/false,如果为true,包含匹配查询的分组数量.默认是false.

    group.truncate:  参数值:true/false,facet计数是根据匹配查询的每组最相关的文档.

    group.facet:   参数值:true/false,

    group.cache.percent:参数值:[0-100],如果> 0,开启分组缓存.分组事实上是执行了两次搜索,这个选项缓存了第二次搜索,值为0则关闭分组缓存.默认是0.测试发现,这个缓存只能提高boolean查询,通配符查询,模糊查询的搜索时间.举个简单的例子,对于term查询或者是全匹配查询,这个缓存就会对搜索有消极的影响.

     注意:

      1.可以在单个request请求中指定多个分组命令(如group.field, group.func, group.query)

      2.分组同样支持分布式搜索.group.truncate和group.func是唯一不支持分布式搜索的参数.

    Known Limitations

      1.目前还不支持在多值字段上分组.

      2.进一步的性能改进计划很快!

     不当之处,还请指正! 谢谢!

  • 相关阅读:
    解决“Caused by: org.gradle.api.plugins.UnknownPluginException: Plugin with id 'org.springframework.boot' not found.”
    linux随机生成密码
    NFS网络共享文件系统
    shell实现带颜色输出的进度条
    【AtCoder】 ARC 101
    【AtCoder】 ARC 102
    【AtCoder】 ARC 103
    20190814校内模拟赛
    「2019-8-13提高模拟赛」树 (tree)
    [PA2014]Fiolki
  • 原文地址:https://www.cnblogs.com/a198720/p/4521939.html
Copyright © 2011-2022 走看看