Flutter数据处理与分析插件zilliz的使用

Flutter数据处理与分析插件zilliz的使用

Zilliz Dart Wrapper

Pub Package License: MIT

一个用于Zilliz REST API的Dart包装器,允许你轻松地将Zilliz集成到你的Dart项目中。

目录

构建状态 最后提交 构建 问题

请我喝杯咖啡

安装

在你的pubspec.yaml文件中添加zilliz作为依赖:

dependencies:
  ...
  zilliz: ^0.0.1-dev.2

然后运行flutter pub get来获取该包。

使用

在你的Dart文件中导入包:

import 'package:zilliz/zilliz.dart';

创建一个新的Zilliz客户端实例:

final zilliz = Zilliz(
  zillizUrl: '[your cloud instance or other host]',
);

现在你可以使用该客户端与Zilliz API进行交互。

示例

以下是几个展示如何使用Zilliz Dart包装器的示例:

创建对象

import 'dart:io';
import 'package:zilliz/zilliz.dart';

void main() async {
  // 检查API密钥环境变量是否已设置
  final zillizApiKey = Platform.environment['OPENAI_API_KEY'];

  if (zillizApiKey == null) {
    stderr.writeln('你需要在ZILLIZ_API_KEY环境变量中设置你的Zilliz API密钥。');
    exit(1);
  }

  final zilliz = Zilliz(zillizUrl: '[your cloud instance or other host]');

  // 如果集合存在,则删除它
  await zilliz.dropCollection('Question');

  // 创建新的集合,字段将动态分配
  await zilliz.createCollection(Collection(
    collectionName: 'Question',
    dimension: 1536,
  ));

  try {
    // 使用JSON文件作为输入文档
    final inputData = json.decode(File('jeopardy_tiny.json').readAsStringSync()) as List<dynamic>;

    // 创建要上传的对象
    for (final element in inputData) {
      await zilliz.insert(
        collectionName: 'Question',
        data: element
          ..addAll({
            'vector': List.generate(1536, (index) => 0.0),
          }),
      );
    }

    print('对象创建成功!');
  } catch (e) {
    print('创建对象时出错: $e');
  }
}

查询对象

首先,你需要一个Dart类来表示查询返回的数据。

class Question {
  final String category;
  final String question;
  final String answer;

  Question({
    required this.category,
    required this.question,
    required this.answer,
  });

  static Question fromJson(Map<String, dynamic> json) => Question(
        category: json['Category'] as String,
        question: json['Question'] as String,
        answer: json['Answer'] as String,
      );

  @override
  String toString() =>
      'Category: $category\nQuestion: $question\nAnswer: $answer';
}

现在,你可以使用Question类作为泛型类型,通过查询方法返回一个List。确保在方法的outputFields参数中列出所需的字段。

final res = await zilliz.query<Question>(
  query: VectorQuery(
    collectionName: 'Question',
    filter: 'Category LIKE "SCIENCE"',
    outputFields: ['Category', 'Question', 'Answer'],
  ),
  fromJson: Question.fromJson,
);

print(res);

更多关于Flutter数据处理与分析插件zilliz的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter数据处理与分析插件zilliz的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在处理和分析Flutter应用中的数据时,Zilliz 提供了一系列强大的工具和插件,这些工具特别适用于大规模数据集的索引、搜索和分析。尽管 Zilliz 最知名的产品可能是其向量数据库 Milvus,但假设你提到的“Zilliz插件”是指与Milvus或相关数据处理和分析功能集成的Flutter插件,这里我将展示如何在Flutter应用中集成和使用Milvus进行基本的数据处理和分析。

请注意,由于Flutter本身是一个前端框架,它不直接处理后端数据库操作。因此,我们通常需要通过Flutter的网络请求库(如http包)与后端服务进行通信,后端服务再与Milvus数据库交互。以下是一个简化的示例,展示了如何在Flutter应用中发送数据到Milvus,并执行基本的搜索操作。

1. 设置后端服务

首先,你需要在后端设置一个服务来处理与Milvus的交互。这里我们使用Flask(Python框架)作为示例:

# app.py
from flask import Flask, request, jsonify
from pymilvus import connections, Collection, FieldSchema, CollectionSchema, DataType
import numpy as np

app = Flask(__name__)

# Connect to Milvus
connections.connect("default", host='localhost', port='19530')

# Create a collection if it doesn't exist
if not Collection.has_collection("test_collection"):
    field1 = FieldSchema(name="id", dtype=DataType.INT64, is_primary=True, auto_id=True)
    field2 = FieldSchema(name="vector", dtype=DataType.FLOAT_VECTOR, dim=128)
    schema = CollectionSchema(fields=[field1, field2])
    collection = Collection(name="test_collection", schema=schema)

@app.route('/insert', methods=['POST'])
def insert_data():
    data = request.json
    vectors = np.array([data['vector']]).astype(np.float32)
    collection.insert([{"id": None, "vector": vectors}])
    return jsonify({"message": "Data inserted successfully"}), 201

@app.route('/search', methods=['POST'])
def search_data():
    data = request.json
    query_vector = np.array([data['vector']]).astype(np.float32)
    results = collection.search(query_vector, "vector", params={"nprobe": 10}, top_k=5)
    return jsonify(results), 200

if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5000)

2. 在Flutter前端发送请求

接下来,在Flutter应用中,你可以使用http包来向后端服务发送请求。

// pubspec.yaml
dependencies:
  flutter:
    sdk: flutter
  http: ^0.13.3
// main.dart
import 'package:flutter/material.dart';
import 'dart:convert';
import 'package:http/http.dart' as http;

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter & Milvus'),
        ),
        body: MyHomePage(),
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final String urlInsert = 'http://<your-server-ip>:5000/insert';
  final String urlSearch = 'http://<your-server-ip>:5000/search';

  void _insertData() async {
    var vector = List.generate(128, (index) => index.toDouble() / 128);
    var body = jsonEncode({"vector": vector});
    var response = await http.post(Uri.parse(urlInsert), body: body, headers: {
      "Content-Type": "application/json",
    });
    print(response.body);
  }

  void _searchData() async {
    var vector = List.generate(128, (index) => index.toDouble() / 128);
    var body = jsonEncode({"vector": vector});
    var response = await http.post(Uri.parse(urlSearch), body: body, headers: {
      "Content-Type": "application/json",
    });
    print(response.body);
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          ElevatedButton(
            onPressed: _insertData,
            child: Text('Insert Data'),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _searchData,
            child: Text('Search Data'),
          ),
        ],
      ),
    );
  }
}

在这个例子中,我们创建了一个简单的Flutter应用,它有两个按钮:一个用于插入数据到Milvus,另一个用于搜索数据。后端服务使用Flask框架与Milvus数据库进行交互。注意,你需要将<your-server-ip>替换为你的后端服务的实际IP地址。

这个示例是一个起点,实际应用中你可能需要处理更多的错误情况、优化性能,并根据你的具体需求扩展功能。

回到顶部