同義詞
如果您的資料集中有多個詞具有相同的含義,您可以建立一個同義詞列表。這將使您的搜尋結果更相關。
設定為同義詞的詞不一定總是返回相同的結果。在預設設定下,movies
資料集對於 great
應該返回 547 個結果,對於 fantastic
應該返回 66 個結果。讓我們將它們設定為同義詞
curl \
-X PUT 'https://127.0.0.1:7700/indexes/movies/settings/synonyms' \
-H 'Content-Type: application/json' \
--data-binary '{
"great": ["fantastic"], "fantastic": ["great"]
}'
使用新的設定,搜尋 great
返回 595 個結果,而 fantastic
返回 423 個結果。這是由於各種因素造成的,例如錯字和分割查詢以找到相關的文件。搜尋 great
將只允許一個錯字 (例如,create
),並考慮到 great
的所有變體 (例如,greatest
) 以及 fantastic
。
警告
搜尋結果的數量可能會因 movies
資料集的變更而有所不同。
標準化
在索引過程中,所有同義詞都會被轉換為小寫並去除 Unicode 編碼。
範例
考慮 Résumé
和 CV
設定為同義詞的情況。
{
"Résumé": [
"CV"
],
"CV": [
"Résumé"
]
}
搜尋 cv
會返回任何包含 cv
或 CV
的文件,此外還會返回任何包含 Résumé
、resumé
、resume
等的文件,不受大小寫或重音符號的影響。
單向關聯
當您希望一個詞與另一個詞同義,但反之則不然時,請使用此功能。
phone => iphone
搜尋 phone
將返回包含 iphone
的文件,如同它們包含 phone
這個詞一樣。
但是,如果您搜尋 iphone
,由於錯字規則,包含 phone
的文件在結果中的排名會較低。
範例
若要建立單向同義詞列表,這是應該加入設定的 JSON 語法。
{
"phone": [
"iphone"
]
}
相關性
精確的搜尋查詢永遠優先於其同義詞。 exactness
排名規則在排名搜尋結果時,會優先考慮精確的字詞而非同義詞。
以下列搜尋結果集為例:
[
{
"id": 0,
"title": "Ghouls 'n Ghosts"
},
{
"id": 1,
"title": "Phoenix Wright: Spirit of Justice"
}
]
如果您將 ghost
設定為 spirit
的同義詞,搜尋 spirit
的查詢將會先返回文件 1
,再返回文件 0
。
雙向關聯
透過將一個或多個同義詞彼此關聯,它們將在雙向都被視為相同。
shoe <=> boot <=> slipper <=> sneakers
當使用這些字詞之一進行搜尋時,所有同義詞都會被視為相同的字詞,並會出現在搜尋結果中。
範例
若要在四個字詞之間建立雙向關聯,這是應該加入設定的 JSON 語法。
{
"shoe": [
"boot",
"slipper",
"sneakers"
],
"boot": [
"shoe",
"slipper",
"sneakers"
],
"slipper": [
"shoe",
"boot",
"sneakers"
],
"sneakers": [
"shoe",
"boot",
"slipper"
]
}
多字詞同義詞
Meilisearch 將多字詞同義詞視為詞組。
範例
假設您將 San Francisco
和 SF
設定為具有雙向關聯的同義詞
{
"san francisco": [
"sf"
],
"sf": [
"san francisco"
]
}
如果您輸入 SF
作為搜尋查詢,Meilisearch 也會返回包含 San Francisco
詞組的結果。然而,根據排名規則,它們可能被認為比包含 SF
的結果相關性較低。反之亦然:如果您的查詢是 San Francisco
,則包含 San Francisco
的文件排名可能會高於包含 SF
的文件。
每個詞彙的最大同義詞數量
單一詞彙最多可有 50 個同義詞。Meilisearch 會自動忽略超出此限制的任何同義詞。例如,如果您為 book
設定 51 個同義詞,Meilisearch 將只會返回包含該詞彙本身和前 50 個同義詞的結果。
如果某個詞彙的任何同義詞包含多個字詞,則該詞彙所有同義詞的字詞總數不能超過 100 個字詞。Meilisearch 會自動忽略超出此限制的任何同義詞。例如,如果您在應用程式中為 computer
設定 40 個同義詞,這些同義詞加總必須少於 100 個字詞。