我们刚刚发布了我们的新版本,其开发背后的驱动力是我们对使用简单性的追求。

我们意识到,由于设计选择,某些功能并不容易使用。整个团队围坐在桌旁,对API路由及其RESTful特性进行了辩论,直到所有人都同意一项提案。我们希望在简单性和自定义之间取得良好的平衡。

那么 v0.9 中有什么新功能呢?

  • 模式删除!
  • 包含 Web 界面来试用您的搜索
  • 新的设置处理
  • 简化的自定义排名规则
  • 添加了主键
  • 新的内置排名规则名称
  • 简化的身份验证
  • 生产和开发模式
  • 错误修复、语法更改和改进

无模式

无模式的概念在我们脑海中已经存在一段时间了。在开始时,用户不应该被要求指定 Meilisearch 应该如何处理每个字段,而只有当他们的需求真正具体且非比寻常时才需要这样做。
现在,默认情况下,Meilisearch 将显示每个文档的字段,使其全部可搜索,并将根据提供的文档结构推断出文档的主键。
这种解决方案在开始使用 Meilisearch 时会导致更少的摩擦。

Web 界面

在之前的版本中,一旦您启动了 Meilisearch 引擎并在其中插入了一些文档,流畅的体验就止步于此。为了尝试搜索,您必须使用 curl 或 SDK 提交请求,要么创建连接到 Meilisearch 的前端搜索栏。

现在 Meilisearch 附带了 Web 界面,您只需打开 Web 浏览器并输入 Meilisearch 的地址即可访问它。这将引导您进入一个包含搜索栏的网页,您可以在其中搜索选定的索引。

movies_web_2-1

由于生产环境需要 API 密钥进行搜索,因此 Web 界面仅在开发模式下可用。

设置

现在,任何不必要使您的 Meilisearch 实例启动和运行的内容都可以在设置中配置。

每个设置都有一个路由,因此可以只更新特定设置。全局设置路由使您可以发布描述自定义配置的配置文件,这将有助于基于相同设置创建类似的 Meilisearch 实例。

示例

{
  "rankingRules": [
      "typo",
      "words",
      "proximity",
      "attribute",
      "wordsPosition",
      "exactness",
      "desc(release_date)"
  ],
  "distinctAttribute": null,
  "searchableAttributes": [
      "title",
      "description",
      "uid"
  ],
  "displayedAttributes": [
      "title",
      "description",
      "release_date",
      "rank",
      "poster"
  ],
  "stopWords": null,
  "synonyms": {
      "wolverine": ["xmen", "logan"],
      "logan": ["wolverine", "xmen"]
  },
  "indexNewFields": false
}

所有设置都可以在这里找到

简化的自定义排名规则

在之前的版本中,创建您自己的规则可能会令人困惑。我们简化了这项任务!现在您只需在排名规则列表中添加一个您某个字段的升序 (asc()) 或降序 (desc()) 规则。

 "rankingRules": [
      "typo",
      "words",
      "proximity",
      "attribute",
      "wordsPosition",
      "exactness",
      "desc(release_date)"
  ]

如果您按照此示例更新您的排名规则,您会注意到 Meilisearch 会立即考虑您的更改。这意味着,一旦应用了所有其他规则,Meilisearch 将认为发布日期更近的文档比较旧的文档更相关。

主键

Meilisearch 将尝试从您上传的文档中推断出主键。这种推断将搜索其属性中包含字符串 id 的第一个字段。
有时,可能会发生找不到任何密钥的情况。在这种情况下,Meilisearch 无法推断它。

由于 Meilisearch 需要主键来存储文档,如果无法推断出主键,我们已经设置了两种替代方法来将主键传达给 Meilisearch。

  • 在索引创建时提供
    {
        "uid": "movies",
        "primaryKey": "movieUniqueName"
    }
    
  • 在添加文档时提供
    $ curl -X POST 'http://localhost:7700/indexes/movies/documents?primaryKey=movieUniqueName' --data @movies.json
    
    

新的排名规则名称

在之前的版本中,排名规则名称太长,可能包含不必要的特殊字符。从现在开始,它们已被简化。以下是新的内置排名规则的列表

  • typo
  • words
  • proximity
  • attribute
  • wordsPosition
  • exactness

请遵循本指南以了解更多关于每个排名规则的作用.

简化的身份验证

向 Meilisearch 添加主密钥时,启动时会生成一个私钥和一个公钥。
公钥仅授予执行搜索和获取文档的路由的权限。
私钥授予访问 Meilisearch 中除 GET /keys 路由之外的所有其他路由的权限。由于它返回公钥和私钥,因此此路由只能使用主密钥访问。

阅读此内容以了解更多关于 Meilisearch 中的身份验证.

生产和开发模式

启动 Meilisearch 实例时,现在可以将设置环境作为选项。
默认情况下,环境设置为开发模式。

在开发模式下,您不必提供主密钥。在这种情况下,无需任何 API 密钥即可访问每个路由。您还可以**访问 Web 界面**。

在生产模式下,如果没有提供主密钥,则该实例将被视为不适合生产,并且不会启动。

错误修复、语法更改和改进

  • 删除了更新系统中的死锁
  • 即使不知道主键,也可以添加设置
  • POST /documents/delete 更改为 POST /documents/delete-batch
  • 加速重新索引系统
  • 在搜索期间没有提示突出显示时,返回的文档中将没有 _highlighted 字段
  • 从搜索查询参数中删除了 searchableAttributes
  • 要了解索引的统计信息,路由现在是:GET /indexes/:index_uid/stats,而不是 GET /stats/:index_uid
  • 文档 ID 只能包含以下字符:A-Z a-z 0-9-_

我们进行的一些路由设计调整是我们为了发布工作版本而做出的临时选择。例如,/key 路由虽然功能齐全,但过于简单,不适合开发人员的常见需求。我们目前正在考虑如何更好地处理它,并且我们对任何建议持开放态度!

这个版本花了我们大约三个月的时间才完成,考虑到 v0.8.5 尚未正式发布,但已添加到 v0.9 版本中。我们在流程组织方面做了很多工作,以确保所有内容都能同时准备好:核心 Meilisearch、文档和 SDK。

我们对这些最新更改将如何改善用户使用 Meilisearch 的体验感到兴奋。此版本是我们与贡献者之间进行大量讨论的结果。我们迫切希望了解您使用 Meilisearch 的体验。任何建议或反馈都非常受欢迎,因为这些是长期和雄心勃勃的项目的先决条件,而该项目将建立在我们今天做出的决策之上。