meilisearch-swift

Meilisearch Swift

Meilisearch | Meilisearch Cloud | 文档 | Discord | 路线图 | 网站 | 常见问题

GitHub Workflow Status License Bors enabled

⚡ 为 Swift 🍎 编写的 Meilisearch API 客户端

Meilisearch Swift 是为 Swift 开发者提供的 Meilisearch API 客户端。

Meilisearch 是一个开源搜索引擎。 了解更多关于 Meilisearch 的信息。

目录

📖 文档

有关此 API 的更多信息,请参阅我们的 Swift 文档

有关 Meilisearch 的更多信息,请参阅我们的 文档 或我们的 API 参考

🔧 安装

使用 Cocoapods

CocoaPods 是 Cocoa 项目的依赖管理器。

Meilisearch-Swift 可通过 CocoaPods 获得。 要安装它,请将以下行添加到您的 Podfile 中

pod 'MeiliSearch'

然后,运行以下命令

pod install

这将下载最新版本的 Meilisearch pod 并准备 xcworkspace

使用 Swift Package Manager

Swift Package Manager 是一种用于自动分发 Swift 代码的工具,并已集成到 swift 编译器中。

设置好 Swift 包后,将 Meilisearch-Swift 添加为依赖项非常容易,只需将其添加到 Package.swiftdependencies 值即可。

dependencies: [
    .package(url: "https://github.com/meilisearch/meilisearch-swift.git", from: "0.17.0")
]

运行 Meilisearch

⚡️ 使用 Meilisearch Cloud 在几分钟内启动、扩展和简化 — 无需维护,无需承诺,随时取消。 立即免费试用

🪨 喜欢自托管? 下载并部署 我们快速的开源搜索引擎到您自己的基础设施上。

🚀 快速开始

要使用客户端执行简单的搜索,您可以创建一个像这样的 Swift 脚本

添加文档

    import MeiliSearch

    // Create a new client instance of Meilisearch.
    // Note: You must provide a fully qualified URL including scheme.
    let client = try! MeiliSearch(host: "https://:7700")

    struct Movie: Codable, Equatable {
        let id: Int
        let title: String
        let genres: [String]
    }

    let movies: [Movie] = [
        Movie(id: 1, title: "Carol", genres: ["Romance", "Drama"]),
        Movie(id: 2, title: "Wonder Woman", genres: ["Action", "Adventure"]),
        Movie(id: 3, title: "Life of Pi", genres: ["Adventure", "Drama"]),
        Movie(id: 4, title: "Mad Max: Fury Road", genres: ["Adventure", "Science Fiction"]),
        Movie(id: 5, title: "Moana", genres: ["Fantasy", "Action"]),
        Movie(id: 6, title: "Philadelphia", genres: ["Drama"])
    ]

    let semaphore = DispatchSemaphore(value: 0)

    // An index is where the documents are stored.
    // The uid is the unique identifier to that index.
    let index = client.index("movies")

    // If the index 'movies' does not exist, Meilisearch creates it when you first add the documents.
    index.addDocuments(
        documents: movies,
        primaryKey: nil
    ) { result in
        switch result {
        case .success(let task):
            print(task) // => Task(uid: 0, status: Task.Status.enqueued, ...)
        case .failure(let error):
            print(error.localizedDescription)
        }
        semaphore.signal()
      }
    semaphore.wait()

通过任务的 uid,您可以使用 更新端点 检查文档添加的状态(enqueuedcanceledprocessingsucceededfailed)。

基本搜索

do {
  // Call the search function and wait for the result.
  let result: SearchResult<Movie> = try await client.index("movies").search(SearchParameters(query: "philoudelphia"))
  dump(result)
} catch {
  print(error.localizedDescription)
}

输出

 MeiliSearch.SearchResult<SwiftWork.(unknown context at $10d9e7f3c).Movie>
  ▿ hits: 1 element
    ▿ SwiftWork.(unknown context at $10d9e7f3c).Movie
      - id: 6
      - title: "Philadelphia"
      ▿ genres: 1 element
        - "Drama"
  - offset: 0
  - limit: 20
  - estimatedTotalHits: 1
  - facetDistribution: nil
  ▿ processingTimeMs: Optional(1)
    - some: 1
  ▿ query: Optional("philoudelphia")
    - some: "philoudelphia"

由于 Meilisearch 具有容错性,因此电影 philadelphia 是对 philoudelphia 的有效搜索响应。

注意:所有包 API 都支持基于闭包的结果,以实现向后兼容性。 更新的 async/await 变体正在 issue 332 中添加。

使用过滤器进行自定义搜索

如果要启用过滤,则必须将属性添加到 filterableAttributes 索引设置中。

index.updateFilterableAttributes(["id", "genres"]) { result in
    // Handle Result in Closure
}

您只需要执行此操作一次。

请注意,每当您更新 filterableAttributes 时,MeiliSearch 都会重建您的索引。 根据数据集的大小,这可能需要一些时间。 您可以使用 更新状态 跟踪该过程。

然后,您可以执行搜索

let searchParameters = SearchParameters(
    query: "wonder",
    filter: "id > 1 AND genres = Action"
)

let response: Searchable<Meteorite> = try await index.search(searchParameters)
{
  "hits": [
    {
      "id": 2,
      "title": "Wonder Woman",
      "genres": ["Action","Adventure"]
    }
  ],
  "offset": 0,
  "limit": 20,
  "nbHits": 1,
  "processingTimeMs": 0,
  "query": "wonder"
}

🤖 与 Meilisearch 的兼容性

此软件包保证与 Meilisearch v1.x 版本 的兼容性,但某些功能可能不存在。 请查看 issues 以获取更多信息。

💡 了解更多

我们主要文档网站上的以下部分可能对您感兴趣

⚙️ 贡献

欢迎对该项目做出任何新的贡献!

如果您想了解更多关于开发工作流程的信息或想贡献代码,请访问我们的 贡献指南 以获取详细说明!

📜 演示

要试用演示,您需要转到 Demos/ 中的相应目录。 在该目录中,您可以

Vapor

请在此处查看 Vapor Demo 源代码:here

Perfect

请在此处查看 Perfect Demo 源代码:here


Meilisearch 提供了并维护了许多像这样的 SDK 和集成工具。 我们希望为每个人提供 适用于任何类型项目的惊人搜索体验。 如果您想贡献代码、提出建议或只是想了解当前的情况,请访问我们的 integration-guides 存储库。