全部產品
Search
文件中心

OpenSearch:summary子句

更新時間:Jul 13, 2024

子句說明

通過在查詢語句中增加summary子句,使用者可以

  • 只進行第二階段查詢,即擷取summary。目前引擎共有3種擷取summary的方式:通過docid、通過pk hash值、通過pk原始值擷取summary

  • 指定動態摘要展示欄位

  • 指定飄紅配置

子句文法

{ 
  "summary" : {
  }
}

只進行第二階段查詢

通過docid取summary

{ 
  "config" : {
    "fetch_summary_type" : "docid"
  },
  "summary" : {
    "gids" : [
        "daogou|6|0|0|0|00000000000000004cd645cfd1c63041|184140777",
        "daogou|6|0|0|1|00000000000000005b3ceae33e5ab800|184140777"
    ]
  }
}

使用者需要在config子句中表明fetch_summary_type是docid,並在fetch_summary子句中填上想要擷取summary的gid。 使用者一般不需要關心gid的具體涵義,只需要從第一階段查詢結果中取出gid即可。

通過pk的hash值取summary

通過pk的hash值取summary的方法與通過docid取基本一樣,也是通過gid的形式來表示想要取summary的文檔,不同之處在於:

  • 需要在config子句設定fetch_summary_type為pk

  • 雖然都是用gid來表示文檔,但是pk與docid還是存在一些區別。一般我們認為一個pk可以唯一的表示一個文檔,但docid不行。 因此我們在使用docid方式取summary時,還需要藉助全量版本和增量版本號碼來定位文檔,但在使用pk來定位文檔時,就可以忽略版本資訊。 所以在使用pk擷取summary時,gid中的全量版本和增量版本以及docid這幾個欄位都是不起作用的。

  • 如果想使用pk的hash值來取summary,必須在這個cluster的schema中配置primary key索引,並設定"has_primary_key_attribute" : true

樣本:

{ 
  "config" : {
    "fetch_summary_type" : "pk"
  },
  "summary" : {
    "gids" : [
        "daogou|6|100|100|100|00000000000000004cd645cfd1c63041|184140777",
        "daogou|6|200|200|200|00000000000000005b3ceae33e5ab800|184140777"
    ]
  }
}

通過pk的原文取summary

通過pk的原文取summary的方式與上述兩種方式都不同,因為它不採用gid來定位文檔,而是直接採用文檔的pk的原文來定位。 通過這種方式取summary,使用者需要:

  • 在config子句設定fetch_summary_type為rawpk

  • 目的地組群的schema中配置了primary key索引,並且叢集配置的hash field必須和primary key是同一個欄位文法

樣本:

{ 
  "config" : {
    "fetch_summary_type" : "rawpk"
  },
  "summary" : {
    "gids" : [
        "cluster1:pk1,pk2",
				"cluster2:pk3,pk4"
    ]
  }
}


config=fetch_summary_type:rawpk&&fetch_summary=cluster1:pk1,pk2;cluster2:pk3,pk4


註:由於pk原文可能出現任一字元,有可能與我們查詢串中的保留字元衝突,
因此需要使用者對所有 引擎查詢串的保留字元進行轉義,在字元前面加上\(反斜線)。
具體需要轉義的字元有:逗號,冒號,分號,&(與號),等號,斜杠本身。 
例如你的pk原文是abc,d:e\,則傳給引擎的pk原文應轉義成abc,d:e\

指定動態摘要展示欄位

使用者可以通過fetch_fields指定動態摘要中要展示的欄位

樣本:

{
  "summary" : {
    "fetch_fields" : ["title", "body", "price"]
  }
}

指定飄紅配置

使用者可以通過highlight配置動態摘要的飄紅配置:

  • highlighter表示要使用的highlighter的名稱

  • pre_tag表示飄紅的首碼tag

  • post_tag表示飄紅的尾碼tag

  • fields表示要飄紅的欄位

    • fragment_size表示片段長度

    • number_of_fragments表示片段的數量

樣本:

{
  "summary" : {
    "highlight" : {
      "highlighter" : "plain",
      "pre_tag" : "<em>",
      "post_tag" : "</em>",
      "fields" : {
        "title" : {
          "fragment_size" : 100,
          "number_of_fragments" : 3
        }
      }
    }
  }
}

注意事項

  • summary子句是可選子句

  • 擷取summary時候可能會出現summary不存在的問題,可能的原因是叢集不穩定導致取summary逾時,或者是由於即時資料更新,對應的文檔在瞬時處於刪除狀態(更新資料時先刪除在添加)。

  • 不建議使用docid的方式擷取summary,因為docid是一個變化的值,當切增量或者即時資料更新時docid可能發生變化。