Flutter全文搜索引擎插件meilisearch的使用
Flutter全文搜索引擎插件meilisearch的使用
Meilisearch是一个开源的搜索引擎,Meilisearch Dart SDK允许Dart和Flutter开发者轻松集成该搜索引擎到他们的应用中。本文将介绍如何在Flutter项目中使用Meilisearch。
Table of Contents
- 📖 Documentation
- 🔧 Installation
- 🚀 Getting started
- Advanced Configuration
- 🤖 Compatibility with Meilisearch
- 💡 Learn more
🔧 Installation
首先,在你的pubspec.yaml
文件中添加以下依赖:
dependencies:
meilisearch: ^0.16.0
然后运行以下命令更新依赖包:
flutter pub get
Run Meilisearch
你可以通过多种方式下载和运行Meilisearch实例。例如,使用curl
命令:
# Install Meilisearch
curl -L https://install.meilisearch.com | sh
# Launch Meilisearch
./meilisearch --master-key=masterKey
你也可以从Homebrew、APT或者使用Docker来运行Meilisearch。
🚀 Getting started
Add Documents
以下是添加文档的示例代码:
import 'package:meilisearch/meilisearch.dart';
void main() async {
var client = MeiliSearchClient('http://127.0.0.1:7700', 'masterKey');
// 创建一个索引
var index = client.index('movies');
const documents = [
{ 'id': 1, 'title': 'Carol', 'genres': ['Romance', 'Drama'] },
{ 'id': 2, 'title': 'Wonder Woman', 'genres': ['Action', 'Adventure'] },
{ 'id': 3, 'title': 'Life of Pi', 'genres': ['Adventure', 'Drama'] },
{ 'id': 4, 'title': 'Mad Max: Fury Road', 'genres': ['Adventure', 'Science Fiction'] },
{ 'id': 5, 'title': 'Moana', 'genres': ['Fantasy', 'Action']},
{ 'id': 6, 'title': 'Philadelphia', 'genres': ['Drama'] },
];
// 添加文档
var task = await index.addDocuments(documents);
}
Basic Search
基本搜索示例:
var result = await index.search('carlo');
print(result.hits);
JSON输出:
[
{
"id": 1,
"title": "Carol",
"genres": ["Romance", "Drama"]
}
]
Custom Search
自定义搜索示例:
var result = await index.search(
'carol',
attributesToHighlight: ['title'],
);
print(result.hits);
JSON输出:
{
"hits": [
{
"id": 1,
"title": "Carol",
"_formatted": {
"id": 1,
"title": "<em>Carol</em>"
}
}
],
"offset": 0,
"limit": 20,
"processingTimeMs": 0,
"query": "carol"
}
Custom Search With Filters
启用过滤器的自定义搜索示例:
await index.updateFilterableAttributes(['id', 'genres']);
await index.search('wonder', filter: ['id > 1 AND genres = Action']);
JSON输出:
{
"hits": [
{
"id": 2,
"title": "Wonder Woman",
"genres": ["Action","Adventure"]
}
],
"offset": 0,
"limit": 20,
"estimatedTotalHits": 1,
"processingTimeMs": 0,
"query": "wonder"
}
Advanced Configuration
Customizing the dio instance
你可以使用dio
库自定义请求拦截器或适配器:
// 使用自定义的dio实例
final customDio = Dio();
final client = MeiliSearchClient.withCustomDio('http://127.0.0.1:7700', 'masterKey', customDio);
Using MeiliDocumentContainer
使用MeiliDocumentContainer<T>
类可以快速获取Meilisearch特定字段:
final res = await index
.search("hello world")
.asSearchResult() // 或者使用.asPaginatedResult() 如果使用分页参数
.mapToContainer();
🤖 Compatibility with Meilisearch
该SDK兼容Meilisearch v1.x版本,但不支持v1.6.0及更高版本中的实验性功能vectorStore
。
💡 Learn more
更多详细信息请参考Meilisearch官方文档:
希望以上内容能帮助你在Flutter项目中成功集成和使用Meilisearch!
更多关于Flutter全文搜索引擎插件meilisearch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter全文搜索引擎插件meilisearch的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用MeiliSearch作为全文搜索引擎的示例代码。MeiliSearch 是一个强大、快速、开源、易于使用的搜索引擎,非常适合与Flutter集成。
首先,你需要确保你的Flutter项目已经设置好,并且你有MeiliSearch实例运行。如果你还没有MeiliSearch实例,你可以按照官方文档进行安装和启动。
1. 添加依赖
在你的pubspec.yaml
文件中添加meilisearch
依赖:
dependencies:
flutter:
sdk: flutter
meilisearch: ^0.10.0 # 确保使用最新版本,版本号可能会有更新
然后运行flutter pub get
来安装依赖。
2. 初始化MeiliSearch客户端
创建一个Dart文件(例如meilisearch_client.dart
)来初始化MeiliSearch客户端:
import 'package:meilisearch/meilisearch.dart';
class MeiliSearchClient {
late Client client;
MeiliSearchClient({required String url, required String apiKey}) {
client = Client(url, apiKey);
}
Future<Index> getIndex(String indexName) async {
return client.index(indexName);
}
Future<Index> createIndex(String indexName) async {
return client.createIndex(indexName);
}
}
3. 在Flutter应用中使用MeiliSearch
接下来,在你的Flutter应用中使用这个客户端。例如,在main.dart
中:
import 'package:flutter/material.dart';
import 'meilisearch_client.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late MeiliSearchClient meiliSearchClient;
late Index index;
List<Map<String, dynamic>> searchResults = [];
@override
void initState() {
super.initState();
meiliSearchClient = MeiliSearchClient(
url: 'http://localhost:7700', // 替换为你的MeiliSearch实例的URL
apiKey: 'your_api_key', // 替换为你的MeiliSearch API密钥
);
_initializeIndex();
}
Future<void> _initializeIndex() async {
index = await meiliSearchClient.createIndex('movies');
// 添加一些文档(示例数据)
await index.addDocuments([
{
'id': 1,
'title': 'Inception',
'genre': 'Sci-Fi',
},
{
'id': 2,
'title': 'The Matrix',
'genre': 'Sci-Fi',
},
{
'id': 3,
'title': 'The Shawshank Redemption',
'genre': 'Drama',
},
]);
// 等待索引更新完成
await index.waitForPendingUpdate();
}
Future<void> _search(String query) async {
var results = await index.search(query);
setState(() {
searchResults = results.hits;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('MeiliSearch Demo'),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
TextField(
decoration: InputDecoration(
labelText: 'Search',
),
onChanged: (query) {
_search(query);
},
),
SizedBox(height: 16),
Expanded(
child: searchResults.isEmpty
? Center(child: Text('No results'))
: ListView.builder(
itemCount: searchResults.length,
itemBuilder: (context, index) {
var result = searchResults[index];
return ListTile(
title: Text(result['title'] as String),
subtitle: Text(result['genre'] as String),
);
},
),
),
],
),
),
),
);
}
}
4. 运行应用
确保你的MeiliSearch实例正在运行,然后运行你的Flutter应用。你应该能够看到一个简单的搜索界面,你可以在其中输入查询词并看到搜索结果。
这个示例展示了如何在Flutter应用中集成MeiliSearch,包括初始化客户端、创建索引、添加文档和执行搜索。你可以根据需要扩展这个示例,例如添加错误处理、优化搜索结果显示等。