同义词
如果您的数据集中有多个含义相同的词,您可以创建同义词列表。这将使您的搜索结果更相关。
设置为同义词的词语并不总是返回相同的结果。使用默认设置,movies
数据集对于 great
应返回 547 个结果,对于 fantastic
应返回 66 个结果。让我们将它们设置为同义词
curl \
-X PUT 'MEILISEARCH_URL/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 个单词。