使用多重搜尋執行聯合搜尋
Meilisearch 允許您使用 /multi-search
端點同時發出多個搜尋請求。聯合搜尋是一種多重搜尋,它會在單一列表中傳回多個查詢的結果。
在本教學中,您將看到如何從 CRM 應用程式建立包含不同類型資料的獨立索引。然後,您將同時執行查詢以搜尋所有這些索引,以取得單一的結果清單。
要求
- 正在執行的 Meilisearch 專案
- 命令列主控台
建立三個索引
下載以下資料集:crm-chats.json
、crm-profiles.json
和 crm-tickets.json
,其中包含來自虛構 CRM 應用程式的資料。
將資料集新增至 Meilisearch,並建立三個獨立的索引,分別為 profiles
、chats
和 tickets
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
來加強來自最有可能包含您想要資訊的索引的結果。