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