meilisearch-vapor

Meilisearch for Vapor

Meilisearch for Swift | Meilisearch Cloud | Discord | 网站

Meilisearch Vapor 是官方 Meilisearch for Swift API 客户端的一个轻量级封装,旨在与 Vapor(一个服务器端 Swift 框架)兼容。

🔧 安装

使用 Swift Package Manager

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

设置好 Swift 包后,将 MeiliSearchVapor 添加为依赖项非常简单,只需将其添加到 Package.swift 文件的 dependencies 值中即可。

dependencies: [
    .package(url: "https://github.com/sherlouk/meilisearch-vapor.git", from: "0.1.0")
]

运行 Meilisearch

有很多简单的方法可以下载并运行 Meilisearch 实例

例如,在您的终端中使用 curl 命令

#Install Meilisearch
curl -L https://install.meilisearch.com | sh

# Launch Meilisearch
./meilisearch --master-key=masterKey

注意:您也可以从 HomebrewAPT 下载 Meilisearch,甚至可以使用 Docker 运行它。

🎬 快速开始

要使用客户端进行简单的插入操作,您可以创建一个像这样的 Swift 脚本

import MeiliSearchVapor

// in your Vapor startup: 
func configure(app: Application) throws {
    app.meilisearch.configure(host: "https://:7700")
}

// in your Vapor route:
app.post("addDocuments") { req -> EventLoopFuture<String> in
    let promise = req.eventLoop.makePromise(of: String.self)
    
    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"])
    ]
    
    // An index is where the documents are stored.
    // The uid is the unique identifier to that index.
    let index = req.meilisearch.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: "enqueued", ...)
            promise.succeed(String(describing: task))
        case .failure(let error):
            promise.fail(error)
        }
    }
    
    return promise.futureResult
}