索引

    索引是一组文档及其关联设置。它类似于 SQL 中的表或 MongoDB 中的集合。

    索引由一个 uid 定义,并包含以下信息

    示例

    假设你管理一个数据库,其中包含有关电影的信息,类似于 IMDb。你可能希望保留多种类型的文档,例如电影、电视剧、演员、导演等等。在 Meilisearch 中,每个类别都将由一个索引表示。

    使用索引的设置,你可以自定义该索引的搜索行为。例如,一个 movies 索引可能包含具有 movie_idtitlegenreoverviewrelease_date 等字段的文档。使用设置,你可以使电影的 title 在搜索结果中比 overview 具有更大的影响力,或者使 movie_id 字段不可搜索。

    一个索引的设置不会影响其他索引。例如,你可以在 movies 索引中使用与 costumes 索引不同的同义词列表,即使它们在同一个服务器上。

    索引创建

    隐式索引创建

    如果你尝试向尚不存在的索引添加文档或设置,Meilisearch 将自动为你创建它。

    显式索引创建

    你可以使用 创建索引端点 来显式创建索引。创建后,你可以使用 添加文档端点 来添加文档。

    虽然隐式索引创建更方便,只需一个 API 请求,但**对于生产环境,显式索引创建被认为更安全**。这是因为隐式索引创建将多个操作捆绑到一个任务中。如果一个操作成功完成而另一个操作失败,则问题可能难以诊断。

    索引 UID

    uid 是索引的**唯一标识符**。它在创建索引时设置,必须是整数或字符串,其中只包含字母数字字符 a-z A-Z 0-9、连字符 - 和下划线 _

    **一旦定义,uid 就无法更改**,你不能创建另一个具有相同 uid 的索引。

    {
      "uid": "movies",
      "createdAt": "2019-11-20T09:40:33.711324Z",
      "updatedAt": "2019-11-20T10:16:42.761858Z"
    }
    

    主键

    每个索引都有一个主键:一个必需的属性,必须存在于索引中的所有文档中。每个文档都必须为此属性关联一个唯一的值。

    主键用于标识每个文档,因此索引中的两个文档永远不会完全相同。如果您添加了两个具有相同主键值的文档,它们将被视为同一个文档:一个将覆盖另一个。如果您尝试添加文档,即使只有一个文档缺少主键,也不会存储任何文档。

    您可以为索引设置主键,也可以让 Meilisearch 推断主键。详细了解 设置主键

    详细了解主键字段

    索引设置

    索引设置可以看作是一个 JSON 对象,其中包含许多用于自定义搜索行为的不同选项。

    您可以自定义以下索引设置

    要更改索引设置,请使用 更新设置端点 或任何子路由。

    显示和可搜索属性

    默认情况下,每个文档字段都可以在搜索查询中搜索和显示。但是,您可以选择将某些字段设置为不可搜索、不可显示或两者皆不可。

    您可以使用 更新设置端点显示属性可搜索属性 的相应端点来更新这些字段属性。

    详细了解显示和可搜索属性。

    唯一属性

    如果您的数据集包含多个类似的文档,您可能希望在搜索时只返回一个。假设您的 costumes 索引中有许多不同尺寸的黑色夹克。将 costume_name 设置为唯一属性将意味着 Meilisearch 不会返回多个具有相同 costume_name 的黑色夹克。

    使用 更新设置端点更新唯一属性端点 指定唯一属性。每个索引只能设置一个字段作为唯一属性。

    详细了解唯一属性。

    分面

    分面是 Meilisearch 中过滤器的一种特定用例:某事物是分面还是过滤器取决于您的 UI 和 UX 设计。与过滤器一样,您需要将分面添加到 filterableAttributes 中,然后使用 filter 搜索参数 进行搜索查询。

    默认情况下,Meilisearch 为每个分面字段返回 100 个分面值。您可以使用 更新设置端点更新分面设置端点 更改此值。

    详细了解分面。

    可过滤属性

    过滤允许您根据不同的类别细化搜索。例如,您可以搜索所有特定 genre 的电影:Science Fiction,其 rating 高于 8

    在对任何文档属性进行过滤之前,您必须使用 更新设置端点更新可过滤属性端点 将其添加到 filterableAttributes 中。然后,使用 filter 搜索参数 进行搜索查询。

    详细了解过滤。

    分页

    为了保护您的数据库免受恶意抓取,Meilisearch 仅为搜索查询返回最多 1000 个结果。您可以使用 更新设置端点更新分页设置端点 更改此限制。

    详细了解分页。

    排名规则

    Meilisearch 使用排名规则对匹配的文档进行排序,以便最相关的文档显示在顶部。所有索引都使用相同的内置排名规则创建,这些规则按默认顺序执行。这些规则的顺序很重要:第一个规则影响最大,最后一个规则影响最小。

    您可以更改此顺序或定义自定义排名规则以首先返回特定结果。这可以通过使用 更新设置端点更新排名规则端点 来完成。

    详细了解排名规则。

    可排序属性

    默认情况下,Meilisearch 根据相关性对结果进行排序。您可以更改此排序行为以首先显示特定结果。

    使用 更新设置端点更新可排序属性端点 将您要排序的属性添加到 sortableAttributes 中。然后,您可以使用 sort 搜索参数 以升序或降序对结果进行排序。

    详细了解排序。

    停用词

    您的数据集可能包含您希望在搜索期间忽略的词语,因为例如,它们没有添加语义值或出现过于频繁(例如,英语中的 theof)。您可以将这些词添加到 停用词列表 中,Meilisearch 将在搜索期间忽略它们。

    使用 更新设置端点更新停用词端点 更改索引的停用词列表。除了提高相关性之外,将常用词指定为停用词还可以大大提高性能。

    详细了解停用词。

    同义词

    您的数据集可能包含具有相似含义的词语。对于这些词语,您可以定义同义词列表:在搜索目的中将被视为相同或相似的词语。设置为同义词的词语不会总是返回相同的结果,因为存在诸如拼写错误和拆分查询之类的因素。

    由于同义词是为给定索引定义的,因此它们不会应用于同一 Meilisearch 实例上的任何其他索引。您可以使用 更新设置端点更新同义词端点 创建您的同义词列表。

    详细了解同义词。

    拼写容错

    拼写容错是一个内置功能,即使您的搜索查询包含拼写错误或错别字,例如键入 chickne 而不是 chicken,它也能帮助您找到相关结果。此设置允许您对索引执行以下操作

    您可以使用 更新设置端点更新拼写容错端点 更新拼写容错设置。

    详细了解拼写容错。

    交换索引

    假设您有一个生产中的索引 movies,您的用户目前正在那里发出搜索请求。您想要部署一个具有不同设置的 movies 的新版本,但是正常更新它会导致您的用户出现停机。可以使用索引交换来解决此问题。

    要使用索引交换,您将创建一个包含您想要对 movies 进行的所有更改的第二个索引 movies_new

    这意味着 movies 的文档、设置和任务历史记录将与 movies_new 的文档、设置和任务历史记录交换,不会对搜索客户端造成任何停机enqueued 任务的任务历史记录不会被修改。

    交换后,您的用户仍然会向 movies 索引发出搜索请求,但它将包含 movies_new 的数据。您可以在交换后删除 movies_new,或者在出现问题并想要交换回来时保留它。

    交换索引是一个原子事务:要么所有索引都成功交换,要么一个也不交换

    有关更多信息,请参见 交换索引端点