同义词

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

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