使用多重搜尋執行聯合搜尋

    Meilisearch 允許您使用 /multi-search 端點同時發出多個搜尋請求。聯合搜尋是一種多重搜尋,它會在單一列表中傳回多個查詢的結果。

    在本教學中,您將看到如何從 CRM 應用程式建立包含不同類型資料的獨立索引。然後,您將同時執行查詢以搜尋所有這些索引,以取得單一的結果清單。

    要求

    建立三個索引

    下載以下資料集:crm-chats.jsoncrm-profiles.jsoncrm-tickets.json,其中包含來自虛構 CRM 應用程式的資料。

    將資料集新增至 Meilisearch,並建立三個獨立的索引,分別為 profileschatstickets

    curl  -X POST 'https://127.0.0.1:7700/indexes/profiles'  -H 'Content-Type: application/json'  --data-binary @crm-profiles.json &&
    curl  -X POST 'https://127.0.0.1:7700/indexes/chats'  -H 'Content-Type: application/json'  --data-binary @crm-chats.json &&
    curl  -X POST 'https://127.0.0.1:7700/indexes/tickets'  -H 'Content-Type: application/json'  --data-binary @crm-tickets.json
    

    使用任務端點來檢查索引狀態。一旦 Meilisearch 成功為所有三個資料集建立索引,您就可以執行聯合搜尋。

    當您在 CRM 應用程式中尋找 Natasha Nguyen 的電子郵件地址時,您可能不知道會在聊天記錄、現有客戶個人資料或最近的支援票證中找到。在這種情況下,您可以使用聯合搜尋來搜尋所有可能的來源,並接收單一的結果清單。

    使用具有 federation 參數的 /multi-search 端點,同時查詢三個索引

    curl \
      -X POST 'https://127.0.0.1:7700/multi-search' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "federation": {},
        "queries": [
          {
            "indexUid": "chats",
            "q": "natasha"
          },
          {
            "indexUid": "profiles",
            "q": "natasha"
          },
          {
            "indexUid": "tickets",
            "q": "natasha"
          }
        ]
      }'
    

    Meilisearch 應回應單一的搜尋結果清單

    {
      "hits": [
        {
          "id": 0,
          "client_name": "Natasha Nguyen",
          "message": "My email is natasha.nguyen@example.com",
          "time": 1727349362,
          "_federation": {
            "indexUid": "chats",
            "queriesPosition": 0
          }
        },],
      "processingTimeMs": 0,
      "limit": 20,
      "offset": 0,
      "estimatedTotalHits": 3,
      "semanticHitCount": 0
    }
    

    提升來自特定索引的結果

    由於這是一個 CRM 應用程式,使用者擁有包含其偏好聯絡資訊的個人資料。如果您想搜尋 Riccardo Rotondo 的偏好電子郵件,您可以加強 profiles 索引中的文件。

    使用 federation 參數的 weight 屬性來加強來自特定查詢的結果

    curl \
      -X POST 'https://127.0.0.1:7700/multi-search' \
      -H 'Content-Type: application/json' \
      --data-binary '{
        "federation": {},
        "queries": [
          {
            "indexUid": "chats",
            "q": "rotondo"
          },
          {
            "indexUid": "profiles",
            "q": "rotondo",
            "federationOptions": {
              "weight": 1.2 
            }
          },
          {
            "indexUid": "tickets",
            "q": "rotondo"
          }
        ]
      }'
    

    此請求將導致目標為 profile 的查詢結果排名高於其他查詢中的文件

    {
      "hits": [
      {
        "id": 1,
        "name": "Riccardo Rotondo",
        "email": "riccardo.rotondo@example.com",
          "_federation": {
            "indexUid": "profiles",
            "queriesPosition": 1
          }
        },],
      "processingTimeMs": 0,
      "limit": 20,
      "offset": 0,
      "estimatedTotalHits": 3,
      "semanticHitCount": 0
    }
    

    結論

    您已建立三個索引,然後執行聯合多重索引搜尋以在單一列表中接收所有結果。然後,您使用 weight 來加強來自最有可能包含您想要資訊的索引的結果。