iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 25
1
Elastic Stack on Cloud

少女人妻的30天Elastic系列 第 25

【少女人妻的30天Elastic】Day 25 : Elastic App Search_Search, Result Fields (Highlights) API

  • 分享至 

  • xImage
  •  

Aloha!又是我少女人妻 Uerica!這陣子幫家裡的狗女兒增添了很多玩具,我買了網路很紅的扭扭魚,原本幻想她會愉快捕魚,結果因為扭扭魚一碰就狂扭,我家狗狗不但討厭還一臉鄙視,完全沒扭到她心坎 QQ ,反而是老公買的寵物益智遊戲,我看了都覺得超難,她反而很喜歡...


Search, Result Fields (Highlights)

還記得前面有講到 Highlights 的調整嗎,這邊是用 API 來做改變搜尋後結果欄位值的呈現方式,有兩種方式呈現 text 的欄位值

  • raw : 欄位值字串精準的表示方式
  • snippet : 字串前後會加上<em>標籤,表示強調

raw 預設回傳字串所有字元,字元最大值無限制,但最少要20 字元。 snippet 預設回傳 100 字元,字定義需介於 20 - 1000 字元之間。

如果result_fields未提供參數, API 將回傳資料原始值

Raw Result Fields

搜尋後結果的回傳值字元設定,預設回傳所有值,結果可以是字串或數字,或 array 形式回傳。

  • size (optional) : 指定回傳值的字元長度,僅可用於 text 類型的欄位值,字元長度至少為 20。
curl -X POST '{API_Endpoint}/api/as/v1/engines/{ENGINE_NAME}/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-xxxxxxxxxx' \
-d '{
  "query": "花蓮",
  "result_fields": {
    "place_name": {
      "raw": {}
    },
    "place_desc": {
      "raw": {
        "size": 20
      }
    }
  }
}'

snippet Result Fields

如果搜尋的字詞有包含再欄位中,會自動在字詞前後加上 <em> </em> 並回傳,是 HTML 的強調標籤,可以將其結果回傳給前端並影響前端顯示。如果沒有找到匹配的字詞, snippet 會顯示 null。

  • size (optional) : 指定回傳值的字元長度,字元長度至少為 20,snippet 回傳字元預設為 100。

  • fallback (optional) : 如果搜尋的字詞沒有在欄位中,Snippet 將會顯示 null ,如果前端自動抓 Snippet 欄位不就 GG 了嗎, Fallback 會讓結果就算沒有關鍵字詞也會出現在 Snippet 欄位中!

curl -X POST '{API_Endpoint}/api/as/v1/engines/{ENGINE_NAME}/search' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer search-xxxxxxxxxx' \
-d '{
  "query": "花蓮",
  "result_fields": {
    "place_name": {
      "raw": {}
    },
    "place_desc": {
      "snippet": {
        "size": 20,
        "fallback": true
      }
    }
  }
}'

好啦~今天就先聊到這邊!感謝大家閱讀~2020最後一個連假來臨了!祝福大家都能過得愉快有意義喔!


上一篇
【少女人妻的30天Elastic】Day 24 : Elastic App Search_Search, Filters Search, Grouping API
下一篇
【少女人妻的30天Elastic】Day 26 : App Search_API 介紹與應用_Search Fields (Weights) Search, Tags
系列文
少女人妻的30天Elastic30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言