如果在您的数据集中有多个词具有相同含义,您可以创建同义词列表。这将使您的搜索结果更加相关。

设置为同义词的词语不总会返回相同的结果。在默认设置下,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 数据集的更改而有所不同。

标准化处理

所有同义词在索引过程中都会进行小写转换去重音处理

示例

假设我们将 RésuméCV 设为同义词:

{
  "Résumé": [
    "CV"
  ],
  "CV": [
    "Résumé"
  ]
}

搜索 cv 将返回包含 cvCV 的文档,以及包含 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 FranciscoSF 设置为互相关联的同义词:

{
  "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 个。