默认情况下,每当文档被添加到 Meilisearch 时,其中发现的所有新属性都会自动添加到两个列表中:

默认情况下,文档中的每个字段都是可显示可搜索的。这些属性可以在设置中进行修改。

显示字段

添加到 displayedAttributes 列表中的属性字段会在每个匹配文档中显示

搜索返回的文档仅包含显示字段。如果某个字段属性不在显示属性列表中,则该字段不会出现在返回的文档中。

默认情况下,所有字段属性都设置为可显示

示例

假设您管理一个包含电影信息的数据库。通过添加以下设置,搜索返回的文档将包含 titleoverviewrelease_dategenres 字段。

curl \
  -X PUT 'MEILISEARCH_URL/indexes/movies/settings/displayed-attributes' \
  -H 'Content-Type: application/json' \
  --data-binary '[
      "title",
      "overview",
      "genres",
      "release_date"
    ]'

可搜索字段

字段可以是可搜索不可搜索的。

当执行搜索时,所有可搜索字段都会被检查是否匹配查询词,并用于评估文档相关性,而不可搜索字段则会被完全忽略。默认情况下,所有字段都是可搜索的。

不可搜索字段最适合用于与搜索体验无关的内部信息,例如仅用于排序结果的 URL、销售数字或评分。

即使您将某个字段设为不可搜索,它仍会存储在数据库中,并且可以在以后重新设为可搜索。

searchableAttributes 列表

Meilisearch 使用一个有序列表来确定哪些属性是可搜索的。这个列表中属性的出现顺序也决定了它们对相关性的影响程度,从影响最大到最小。

换句话说,searchableAttributes 列表有两个作用:

  1. 指定哪些字段是可搜索的
  2. 决定属性排序顺序

searchableAttributes 列表有两种可能的模式。

默认:自动模式

默认情况下,所有属性都会按照出现顺序自动添加到 searchableAttributes 列表中。 这意味着初始顺序将基于第一个被索引文档中的属性顺序,后续文档中发现的新属性会被追加到这个列表的末尾。

这种默认行为通过 searchableAttributes 值为 ["*"] 来表示。要验证当前 searchableAttributes 列表的值,可以使用获取可搜索属性接口

如果你想将可搜索属性列表恢复为这种默认行为,可以searchableAttributes 设为空数组 [] 或使用重置可搜索属性接口

手动设置

在某些情况下,您可能希望将某些属性设为不可搜索,或者在文档建立索引后调整属性排序规则。为此,您需要按照期望的顺序排列属性,并通过更新可搜索属性接口提交更新后的列表。

请注意:手动更新 searchableAttributes 列表后,后续新增的属性将不再自动加入可搜索列表,除非您重置相关设置

由于实现上的一个缺陷,手动更新 searchableAttributes 会改变 JSON 响应中文档字段的显示顺序。这一不一致行为将在未来版本中修复。

示例

假设您管理着一个电影数据库,包含以下字段:idoverviewgenrestitlerelease_date。虽然这些字段都包含有用信息,但某些字段对搜索更有价值。若要将 idrelease_date 设为不可搜索,并按重要性重新排序剩余字段,您可以按以下方式更新可搜索属性列表:

curl \
  -X PUT 'MEILISEARCH_URL/indexes/movies/settings/searchable-attributes' \
  -H 'Content-Type: application/json' \
  --data-binary '[
      "title",
      "overview",
      "genres"
    ]'

在搜索时自定义搜索属性

默认情况下,所有查询都会搜索 searchableAttributes 列表中的所有属性。您可以使用attributesToSearchOn搜索参数来限制特定查询只搜索索引中searchableAttributes的子集。

数据存储

所有字段都会存储在数据库中,这一行为不可更改

这意味着即使某个字段既不在displayedAttributes列表中,也不在searchableAttributes列表中,它仍然会被存储在数据库里,并且可以随时添加到其中一个或两个列表中。