同义词

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

    设置为同义词的词语并不总会返回相同的结果。使用默认设置,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 将返回任何包含 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 个单词。