文档是由一个或多个字段组成的对象。每个字段都包含一个属性及其关联的。文档作为组织数据的容器,是 Meilisearch 数据库的基本构建块。要搜索文档,您必须首先将其添加到索引中。 如果两个索引包含完全相同的文档,它们之间不会共享任何内容。相反,这两个文档将被视为不同的文档。根据索引的设置,文档的大小可能不同。

结构

Diagram illustration Meilisearch's document structure

重要术语

  • 文档:包含一个或多个字段形式数据的对象
  • 字段:两个相互关联的数据项的集合:一个属性和一个值
  • 属性:字段的第一部分。作为其关联值的名称或描述
  • :字段的第二部分,由任何有效的 JSON 类型数据组成
  • 主字段:所有文档中必须存在的特殊字段。它包含主键和文档标识符

字段

字段是两个相互关联的数据项的集合:一个属性和一个值。文档由字段组成。 属性是区分大小写的字符串,用作字段的名称,并允许您存储、访问和描述数据。 该数据是字段的。每个字段都有一个由其值决定的数据类型。每个值都必须是有效的JSON 数据类型 如果值是字符串,它最多可以包含 65535 个位置。超出 65535 位置限制的单词将被忽略。 如果字段包含对象,Meilisearch 在索引时会使用点表示法将其扁平化,并将对象的键和值带到文档本身的根级别。这个扁平化的对象只是一个中间表示——您将在搜索时获得原始结构。您可以在我们的专用指南中阅读更多信息。 通过排名规则,您可以决定哪些字段比其他字段更相关。例如,您可以决定最近的电影比旧的电影更相关。您还可以将某些字段指定为显示或可搜索。
某些功能要求 Meilisearch 保留属性。例如,要使用地理搜索功能,您的文档必须包含一个_geo字段。保留属性始终以一个下划线 (_) 为前缀。

显示字段和可搜索字段

默认情况下,文档中的所有字段都是显示且可搜索的。显示字段包含在每个匹配的文档中,而可搜索字段则用于搜索匹配的查询词。 您可以使用更新设置端点,或显示属性可搜索属性的相应更新端点来修改此行为,以便字段:
  • 可搜索但不显示
  • 显示但不可搜索
  • 既不显示也不可搜索
在后一种情况下,该字段在搜索期间将被完全忽略。但是,它仍将存储在文档中。 要了解更多信息,请参阅我们的显示和可搜索属性指南

主字段

主字段是所有文档中必须存在的特殊字段。其属性是主键,其值是文档 ID。如果您尝试索引缺少主键或给定索引的主键错误的文档,则会导致错误,并且不会添加任何文档。 要了解更多信息,请参阅主键解释

上传

默认情况下,Meilisearch 将所有有效负载(因此也包括文档上传)的大小限制为 100MB。您可以在运行时使用http-payload-size-limit选项更改有效负载大小限制 Meilisearch 在索引文档时会占用大量 RAM。在增加批处理大小时请注意您的RAM 可用性,因为这可能会导致 Meilisearch 崩溃。 使用添加或更新文档端点时,请确保:
  • 有效负载格式正确。没有多余的逗号、不匹配的括号、缺失的引号等。
  • 所有文档都以数组形式发送,即使只有一个文档也是如此

数据集格式

Meilisearch 接受以下格式的数据集

JSON

表示为 JSON 对象的文档是括在花括号中的键值对。因此,适用于 JSON 对象格式的任何规则也适用于 Meilisearch 文档的格式。例如,属性必须是字符串,而值必须是有效的JSON 数据类型 Meilisearch 仅在接收到application/json内容类型标头时才接受 JSON 文档。 例如,假设您正在创建一个包含电影信息的索引。一个示例文档可能如下所示:
{
  "id": 1564,
  "title": "Kung Fu Panda",
  "genres": "Children's Animation",
  "release-year": 2008,
  "cast": [
    { "Jack Black": "Po" },
    { "Jackie Chan": "Monkey" }
  ]
}
在上面的例子中
  • "id""title""genres""release-year""cast" 是属性
  • 每个属性都关联一个值,例如,"Kung Fu Panda""title" 的值
  • 文档包含一个字段,其主键属性和唯一的文档 ID 作为其值:"id": "1564"

NDJSON

NDJSON 或 jsonlines 对象由单独的行组成,其中每一行都是有效的 JSON 文本,并且每行都用换行符分隔。适用于NDJSON 格式的任何规则也适用于 Meilisearch 文档。 Meilisearch 仅在接收到application/x-ndjson内容类型标头时才接受 NDJSON 文档。 与 JSON 相比,NDJSON 具有更好的写入性能,并且 CPU 和内存占用更少。它更容易验证,并且与 CSV 不同,可以处理嵌套结构。 上面的 JSON 文档在 NDJSON 中将如下所示:
{ "id": 1564, "title": "Kung Fu Panda", "genres": "Children's Animation", "release-year": 2008, "cast": [{ "Jack Black": "Po" }, { "Jackie Chan": "Monkey" }] }

CSV

CSV 文件将数据表示为由分隔符字符分隔的值序列。Meilisearch 接受 CSV 文档的stringbooleannumber数据类型。如果您未指定属性的数据类型,它将默认为string。空字段,例如,,, ,将被视为null 默认情况下,Meilisearch 使用单个逗号 (,) 作为分隔符。使用添加或更新文档添加或替换文档端点的csvDelimiter查询参数来设置不同的字符。适用于CSV 格式的任何规则也适用于 Meilisearch 文档。 Meilisearch 仅在接收到text/csv内容类型标头时才接受 CSV 文档。 与 JSON 相比,CSV 具有更好的写入性能,并且 CPU 和内存占用更少。 上面的 JSON 文档在 CSV 中将如下所示:
  "id:number","title:string","genres:string","release-year:number"
  "1564","Kung Fu Panda","Children's Animation","2008"
由于 CSV 不支持数组或嵌套对象,因此无法将 cast 转换为 CSV。

自动批处理

自动批处理将相同索引中的类似操作合并到单个批处理中,然后一起处理它们。这显著加快了索引过程。 同一批处理中的任务共享相同的startedAtfinishedAtduration值。 如果任务因无效文档而失败,它将从批处理中删除。批处理的其余部分将正常处理。如果发生internal错误,整个批处理将失败,并且其中的所有任务将共享相同的error对象。

自动批处理和任务取消

如果您要取消的任务是批处理的一部分,Meilisearch 会中断整个过程,放弃所有进度,并取消该任务。然后,它会自动创建一个没有取消任务的新批处理,并立即开始处理它。
© . This site is unofficial and not affiliated with Meilisearch.