Flutter搜索功能插件typesense_search的使用

Flutter搜索功能插件typesense_search的使用

安装

要使用typesense_search插件,请在项目的pubspec.yaml文件中添加以下依赖:

dependencies:
  typesense: ^版本号

然后运行flutter pub get来安装该依赖。

开始使用

首先,需要实例化TypesenseSearch服务。以下是一个简单的示例:

final searchService = TypesenseSearch(
    apiKey: "YOUR_API_KEY", 
    host: InternetAddress.loopbackIPv4
);

过滤

要使用过滤功能,可以调用search方法。以下是一个示例代码:

Future<dynamic> search<T>(String collectionName,
      {required Parameters parameters,
      required T Function(Map<String, dynamic>) fromJson}) async {
  // 实现搜索逻辑
}

搜索结果可以通过以下方式访问:

// 如果结果不是分组请求
print("总项目数: ${apiResponse.found}");
print("面数计数: ${apiResponse.facetCount}");
print("项目列表: ${apiResponse.hits}");

// 如果结果是分组请求
print("总文档数: ${apiResponse.foundDocs}");
print("总分组数: ${apiResponse.found}");
print("面数计数: ${apiResponse.facetCount}");
print("分组项目列表: ${apiResponse.groupedHits}");

示例代码

以下是一个完整的示例代码,展示了如何使用typesense_search插件进行搜索:

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

void main() async {
  // 设置节点信息
  final host = InternetAddress.loopbackIPv4.address, protocol = Protocol.http;
  final nodes = {
    Node(
      protocol,
      host,
      port: 7108,
    ),
    Node.withUri(
      Uri(
        scheme: 'http',
        host: host,
        port: 8108,
      ),
    ),
    Node(
      protocol,
      host,
      port: 9108,
    ),
  };

  // 初始化TypesenseSearch对象
  final typesenseSearch = TypesenseSearch.withNodes(
    apiKey: "YOUR_API_KEY",
    nodes: nodes,
    numRetries: 3,
    connectionTimeout: const Duration(seconds: 2),
  );

  // 设置搜索参数
  final parameters = Parameters(
    query: 'marg',
    queryBy: 'name',
    sortBy: 'name:asc',
  );

  // 执行搜索
  final result = await typesenseSearch.search<String>(
    "drinks",
    parameters,
    fromJson: (json) => json["name"],
  );

  // 输出搜索结果
  print("总项目数: ${result.found}");
  print("项目列表: ${result.hits}");
}

更多关于Flutter搜索功能插件typesense_search的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter搜索功能插件typesense_search的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用typesense_search插件来实现搜索功能的代码示例。typesense_search是一个用于与Typesense搜索引擎集成的Flutter插件,它允许你在应用中轻松实现全文搜索功能。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加typesense_search依赖:

dependencies:
  flutter:
    sdk: flutter
  typesense_search: ^x.y.z  # 请替换为最新版本号

然后运行flutter pub get来安装依赖。

2. 配置Typesense客户端

在你的Flutter项目的某个合适位置(比如main.dart或专门的搜索服务文件中),配置Typesense客户端:

import 'package:flutter/material.dart';
import 'package:typesense_search/typesense_search.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SearchScreen(),
    );
  }
}

class SearchScreen extends StatefulWidget {
  @override
  _SearchScreenState createState() => _SearchScreenState();
}

class _SearchScreenState extends State<SearchScreen> {
  late TypesenseClient client;

  @override
  void initState() {
    super.initState();
    // 配置Typesense客户端
    client = TypesenseClient(
      nodes: [
        TypesenseNode(
          host: 'your-typesense-server-host', // 替换为你的Typesense服务器地址
          port: 8108, // Typesense默认端口
          apiKey: 'your-api-key', // 替换为你的Typesense API密钥
        ),
      ],
      connectionTimeoutSeconds: 2,
      numRetries: 3,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Search Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            TextField(
              decoration: InputDecoration(
                border: OutlineInputBorder(),
                labelText: 'Search',
              ),
              onSubmitted: (query) async {
                await performSearch(query);
              },
            ),
            Expanded(
              child: SearchResults(),
            ),
          ],
        ),
      ),
    );
  }

  Future<void> performSearch(String query) async {
    // 假设你在Typesense中有一个名为'books'的collection
    var collections = client.collections;
    var searchResponse = await collections.books!.documents!.search(query);

    // 处理搜索结果(这里仅作示例,你可以根据需要处理)
    print(searchResponse.hits);
  }
}

// 这是一个简单的用于展示搜索结果的组件
class SearchResults extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 这里应该根据搜索结果来动态生成UI,但因为我们没有维护搜索结果的状态,
    // 所以这里仅展示一个占位组件。
    return ListView.builder(
      itemCount: 0, // 应该根据搜索结果的数量来设置
      itemBuilder: (context, index) {
        // 根据搜索结果生成UI元素
        return ListTile(
          title: Text('Placeholder Item'),
        );
      },
    );
  }
}

3. 运行应用

确保你的Typesense服务器正在运行,并且你已经创建了一个名为books的collection(或者根据你的需求更改collection名称)。然后运行你的Flutter应用,你应该能够看到一个简单的搜索界面。

注意事项

  • 在实际项目中,你应该将Typesense客户端配置(如host、port和apiKey)以及搜索逻辑封装在合适的位置(如服务层或ViewModel中),以保持代码的整洁和可维护性。
  • 你需要处理搜索结果的状态,以便在UI中动态展示它们。
  • 根据你的需求,你可能需要添加错误处理、加载状态等。

这个示例仅展示了如何使用typesense_search插件进行基本的搜索操作,实际应用中你可能需要根据具体需求进行更多的定制和扩展。

回到顶部