同义词
如果您的数据集中有多个词具有相同的含义,您可以创建同义词列表。这将使您的搜索结果更相关。
设置为同义词的词语并不总会返回相同的结果。使用默认设置,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 个单词。