你有過在搜尋條件較複雜時,導致沒有任何搜尋結果,這時候我們可以如何調整 Algolia 設定放寬搜尋條件呢?
例如:
當我們使用 Algolia 想搜尋一位 “全端工程師” 時,我們可能會下以下關鍵字
tailwind
react
ror
postgresql
redis
但是這樣的搜尋條件在預設要全部符合的情況下,很可能會導致沒有任何搜尋結果。
-
removeWordsIfNoResults
當搜尋條件沒有任何結果時,根據設定的規則,自動將關鍵字設為 optional 來嘗試找到結果。- none: 不做任何處理 (預設)
- lastWords: 持續將最後一個關鍵字設定為 optional,最多 5 個關鍵字,直到找到結果
- firstWords: 持續將第一個關鍵字設定為 optional,最多 5 個關鍵字,直到找到結果
- allOptional: 將所有關鍵字設定為 optional,等於將所有關鍵字改為 OR 條件
index .search("query", { removeWordsIfNoResults: "lastWords", // removeWordsIfNoResults: 'none' // removeWordsIfNoResults: 'firstWords' // removeWordsIfNoResults: 'allOptional' }) .then(({ hits }) => { console.log(hits); });
-
optionalWords
指定哪些關鍵字為 optional,藉此放寬搜尋條件。
index
.search("query", {
optionalWords: ["ror", "postgresql"],
})
.then(({ hits }) => {
console.log(hits);
});
差異
兩個設定當然都會將符合最多關鍵字的結果排在最前面,但是差異在於:
-
removeWordsIfNoResults
只在搜尋條件沒有任何結果時,才會逐漸的將關鍵字設為 optional,直到找到搜尋結果,因此也可能搜尋結果只有 1 筆。 -
optionalWords
可以手動將 query 的所有關鍵字都設為 optional,可以盡可能地回傳更多搜尋結果,而不會只有 1 筆搜尋結果。