同义词

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

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