索引
索引是文档的集合,非常类似于 MySQL 中的表或 MongoDB 中的集合。
索引是一组带有相关设置的文档。它类似于 SQL
中的表或 MongoDB 中的集合。
索引由 uid
定义,并包含以下信息
示例
假设您管理一个包含电影信息的数据库,类似于 IMDb。您可能希望保留多种类型的文档,例如电影、电视剧、演员、导演等。这些类别中的每一个都将由 Meilisearch 中的一个索引表示。
使用索引的设置,您可以自定义该索引的搜索行为。例如,movies
索引可能包含具有 movie_id
、title
、genre
、overview
和 release_date
等字段的文档。通过设置,您可以让电影的 title
对搜索结果的影响比其 overview
更大,或者使 movie_id
字段不可搜索。
一个索引的设置不会影响其他索引。例如,您可以为 movies
索引使用与 costumes
索引不同的同义词列表,即使它们在同一服务器上。
索引创建
隐式索引创建
如果您尝试向尚不存在的索引添加文档或设置,Meilisearch 将自动为您创建该索引。
显式索引创建
您可以使用 创建索引端点 显式创建索引。创建后,您可以使用 添加文档端点 添加文档。
虽然隐式索引创建更方便,只需要一个 API 请求,但**显式索引创建被认为对生产环境更安全**。这是因为隐式索引创建将多个操作捆绑到一个任务中。如果一个操作成功完成而另一个失败,则问题可能难以诊断。
索引 UID
uid
是索引的**唯一标识符**。它在创建索引时设置,必须是整数或只包含字母数字字符 a-z A-Z 0-9
、连字符 -
和下划线 _
的字符串。
**一旦定义,uid
就不能更改**,并且您不能创建另一个具有相同 uid
的索引。
主键
每个索引都有一个主键:一个必需的属性,必须存在于索引中的所有文档中。每个文档必须具有与此属性关联的唯一值。
主键用于识别每个文档,使得索引中的两个文档永远不会完全相同。如果您添加两个具有相同主键值的文档,它们将被视为同一文档:一个将覆盖另一个。如果您尝试添加文档,并且即使只有一个文档缺少主键,所有文档都不会被存储。
您可以为索引设置主键,或让 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
搜索参数 以升序或降序排序您的结果。
停用词
您的数据集可能包含您希望在搜索时忽略的词语,例如,它们不增加语义价值或出现过于频繁(例如,英语中的 the
或 of
)。您可以将这些词添加到 停用词列表 中,Meilisearch 将在搜索时忽略它们。
使用 更新设置端点 或 更新停用词端点 更改索引的停用词列表。除了提高相关性,将常用词指定为停用词还能大大提高性能。
同义词
您的数据集可能包含含义相似的词语。对于这些词,您可以定义一个同义词列表:在搜索目的上将被视为相同或相似的词。由于拼写错误和查询拆分等因素,设置为同义词的词语不总是返回相同的结果。
由于同义词是为给定索引定义的,它们不会应用于同一 Meilisearch 实例上的任何其他索引。您可以使用 更新设置端点 或 更新同义词端点 创建您的同义词列表。
拼写容错
拼写容错是一个内置功能,即使您的搜索查询包含拼写错误或打字错误(例如,键入 chickne
而不是 chicken
),也能帮助您找到相关结果。此设置允许您对索引执行以下操作
- 启用或禁用拼写容错
- 配置拼写错误的最小单词大小
- 禁用特定单词上的拼写错误
- 禁用特定文档属性上的拼写错误
您可以使用 更新设置端点 或 更新拼写容错端点 更新拼写容错设置。
交换索引
假设您有一个正在生产中使用的索引 movies
,用户当前正在向其发出搜索请求。您想要部署一个具有不同设置的新版本 movies
,但正常更新可能会导致用户停机。这个问题可以通过索引交换来解决。
要使用索引交换,您将创建第二个索引 movies_new
,其中包含您想要对 movies
进行的所有更改。
这意味着 movies
的文档、设置和任务历史将与 movies_new
的文档、设置和任务历史进行交换,**而不会对搜索客户端造成任何停机**。enqueued
任务的任务历史不会被修改。
交换后,您的用户仍将向 movies
索引发出搜索请求,但它将包含 movies_new
的数据。交换后您可以删除 movies_new
,或者保留它以防万一出现问题时您想换回来。
交换索引是一个原子事务:**要么所有索引都成功交换,要么都不交换**。
欲了解更多信息,请参阅 交换索引端点。