Meilisearch ASP.Net Core API 功能demo
- 安装
MeiliSearch 0.15.5 0.15.5
- demo code
using Meilisearch;
using System.Data;
using System.Text.Json;
using System.Text.Json.Serialization;namespace MeiliSearchAPI
{public class MeilisearchHelper{public MeilisearchHelper(){DefaultClient = new MeilisearchClient(MeilisearchAddress(), ApiKey);var httpClient = new HttpClient(new MeilisearchMessageHandler(new HttpClientHandler())) { BaseAddress = new Uri(MeilisearchAddress()) };ClientWithCustomHttpClient = new MeilisearchClient(httpClient, ApiKey);}private const string ApiKey = "ellisniubitesthahaha";private static readonly string BasePath = Path.Combine(Directory.GetCurrentDirectory(), "Datasets");public static readonly string SmallMoviesJsonPath = Path.Combine(BasePath, "small_movies.json");public virtual string MeilisearchAddress(){return "http://192.168.214.133:31170";}public MeilisearchClient DefaultClient { get; private set; }public MeilisearchClient ClientWithCustomHttpClient { get; private set; }/// <summary>/// 从json文件插入document/// </summary>/// <returns></returns>public async Task InitIndexWithValue(string indexName){var index = DefaultClient.Index(indexName);var jsonDocuments = await File.ReadAllTextAsync(SmallMoviesJsonPath);var task = await index.AddDocumentsJsonAsync(jsonDocuments);await index.WaitForTaskAsync(task.TaskUid);}/// <summary>/// 根据类插入document/// </summary>/// <param name="datasetSmallMovies"></param>/// <returns></returns>public async Task<TaskInfo> InsertDocument<T>(List<T> datasetSmallMovies,string indexName){var index = DefaultClient.Index(indexName);var task = await index.AddDocumentsAsync<T>(datasetSmallMovies);return task;}/// <summary>/// 基本查询/// </summary>/// <param name="searchText"></param>/// <returns></returns>public async Task<List<T>> BasicSearch<T>(string searchText,string indexName){var index = DefaultClient.Index(indexName);ISearchable<T> movies = await index.SearchAsync<T>(searchText);return movies.Hits.ToList();}/// <summary>/// 高亮基本查询/// </summary>/// <param name="searchText"></param>/// <returns></returns>public async Task<List<T>> HighlightBasicSearch<T>(string searchText,string indexName){var index = DefaultClient.Index(indexName);ISearchable<T> movies = await index.SearchAsync<T>(searchText,new SearchQuery{//AttributesToHighlight = new string[] { "title" },AttributesToHighlight = ["*"],HighlightPreTag = "<ellis>",HighlightPostTag = "</ellis>"});return movies.Hits.ToList();}/// <summary>/// 设置搜索字段,设置filter字段/// </summary>/// <returns></returns>public async Task<TaskInfo> UpdateIndexConfig(){var index = DefaultClient.Index("small_movies");return await index.UpdateSettingsAsync(new Settings(){FilterableAttributes = new string[] { "id", "release_date" },SearchableAttributes = new string[] { "title" },DisplayedAttributes = new string[] { "title", "release_date", "id" , "poster", "overview", "genre" }});}/// <summary>/// query 以及filter/// </summary>/// <returns></returns>public async Task<List<DatasetSmallMovie>> QueryByFilter(){var index = DefaultClient.Index("small_movies");return index.SearchAsync<DatasetSmallMovie>("", new SearchQuery(){Filter = "id=338952 AND release_date=1542153600",Limit = 10,Offset = 0}).Result.Hits.ToList();}/// <summary>/// 创建索引的同时指定主键字段/// </summary>/// <param name="indexName"></param>/// <param name="primaryKey"></param>/// <returns></returns>public async Task<TaskInfo> CreateIndex(string indexName,string primaryKey){return await DefaultClient.CreateIndexAsync(indexName, primaryKey);}/// <summary>/// 更新/// </summary>/// <returns></returns>public async Task<TaskInfo> UpdateDocumentByID(){var index = DefaultClient.Index("small_movies");return await index.UpdateDocumentsAsync(new DatasetSmallMovie[] { new DatasetSmallMovie() { Id = "1", Title = "just do it" ,ReleaseDate=DateTime.Now} });}/// <summary>/// 根据ID查询/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<T> GetByID<T>(string id,string indexName){var index = DefaultClient.Index(indexName);return await index.GetDocumentAsync<T>(id);}public async Task<TaskInfo> DeleteDocuments(string[] ids,string indexName){var index = DefaultClient.Index(indexName);return await index.DeleteDocumentsAsync(ids);}}public class BaseClass{public string Id { get; set; }}public class DatasetSmallMovie:BaseClass{public string Title { get; set; }public string Poster { get; set; }public string Overview { get; set; }[JsonPropertyName("release_date")][JsonConverter(typeof(UnixEpochDateTimeConverter))]public DateTime ReleaseDate { get; set; }public string Genre { get; set; }}//高亮查询使用public class FormattedSmallMovie{public string Id { get; set; }public string Title { get; set; }public string Poster { get; set; }public string Overview { get; set; }[JsonPropertyName("release_date")][JsonConverter(typeof(UnixEpochDateTimeConverter))]public DateTime ReleaseDate { get; set; }public string Genre { get; set; }public DatasetSmallMovie _Formatted { get; set; }}sealed class UnixEpochDateTimeConverter : JsonConverter<DateTime>{static readonly DateTime s_epoch = new DateTime(1970, 1, 1, 0, 0, 0);public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options){if (reader.TokenType == JsonTokenType.String){string stringValue = reader.GetString();var unixTime = Convert.ToInt64(stringValue);return s_epoch.AddMilliseconds(unixTime);}else{var unixTime = reader.GetInt64();return s_epoch.AddMilliseconds(unixTime);}}public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options){var unixTime = Convert.ToInt64((value - s_epoch).TotalMilliseconds);writer.WriteNumberValue(unixTime);}}
}
官网
源码
https://www.meilisearch.com/docs/reference/api/search
https://github.com/meilisearch/meilisearch-dotnet/issues/315
相关文章:
Meilisearch ASP.Net Core API 功能demo
安装 MeiliSearch 0.15.5 0.15.5demo code using Meilisearch; using System.Data; using System.Text.Json; using System.Text.Json.Serialization;namespace MeiliSearchAPI {public class MeilisearchHelper{public MeilisearchHelper(){DefaultClient…...

程序员独立开发竞品分析:确定网站使用什么建站系统
要确定一个网站使用的建站系统,可以通过以下几种方法尝试分析: 查看页面源代码: 打开网站,右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志,例如: WordPress 的迹象:…...

selenium+pyqt5自动化工具总结
说明:本工具是,操作外部google浏览器、selenium是无法操作qt界面中嵌套的浏览器的, 工具在后面 1. 代码结构 pycharm打开的文件下,再写一个子文件,文件导入的时候把子文件名带上 这样就可以在 外层使用命令 pyinst…...

docker GPU安装
docker 离线安装 docker下载地址:https://download.docker.com/linux/static/stable/x86_64/ 解压: tar xzvf docker-24.0.6.tgz移动解压后的内容 sudo mv docker/* /usr/local/bin/创建 docker.service配置文件 sudo vim /etc/systemd/system/dock…...

hutool糊涂工具通过注解设置excel宽度
import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…...
Three.js教程015:全面讲解Three.js的UV与应用
文章目录 全面讲解UV与应用UV介绍代码演示完整代码全面讲解UV与应用 UV介绍 在 Three.js 中,UV 坐标(也称为纹理坐标)是用来定义纹理如何映射到三维模型上的一组二维坐标。UV 坐标的范围通常是 (0, 0) 到 (1, 1),其中: U 对应纹理的横向轴(类似于 X 轴)。V 对应纹理的…...

IOS界面传值-OC
1、页面跳转 由 ViewController 页面跳转至 NextViewController 页面 (1)ViewController ViewController.h #import <UIKit/UIKit.h>interface ViewController : UIViewControllerend ViewController.m #import "ViewController.h" …...

阿里mod_asr3.0集成webrtc静音算法
alibabacloud-nls-cpp-sdk-master 先到阿里官网下载nls库的源代码,编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /home/jp/2025/alibabacloud-nls-cpp-sdk-master/build/install/NlsSdk3.X_LINUX/include/ /home/jp/2025/alibabacloud-nls-cpp-sdk-…...
[Git] git pull --rebase / git rebase origin/master
1. git pull --rebase 这个命令是用来更新当前分支的,它会从远程仓库拉取更新,然后将你的本地提交重新应用到更新后的基础之上。它相当于先执行 git fetch,然后在当前分支上执行 git rebase origin/。使用 --rebase 而不是默认的 merge 可以…...
Leetcode3270:求出数字答案
题目描述: 给你三个 正 整数 num1 ,num2 和 num3 。 数字 num1 ,num2 和 num3 的数字答案 key 是一个四位数,定义如下: 一开始,如果有数字 少于 四位数,给它补 前导 0 。答案 key 的第 i 个数…...
第十一章 施工监测
11 施工监测 11.1 施工监测主要内容、常用仪器与方法 11.1.1 主要内容 1.目的和意义 及时掌握工程自身及周边环境风险动态、通过分析和预测工程结构及周边环境的安全状态与发展趋势,优化调整设计参数和施工参数提供数据支撑。为今后同类工程施工提供类比资料 2…...
Python爬虫应用领域
Python爬虫作为一种强大的数据获取工具,在多个领域发挥着重要作用。以下是Python爬虫在不同领域的应用情况: 一、数据采集与分析 (一)市场调研 产品信息收集:爬取电商平台的产品详情、价格、销量、用户评价等数据&am…...
软件架构考试基础知识 002:进程的状态与其切换
进程状态转换的说明 在操作系统中,进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明: 1. 三态模型(Three-state Model) 三态模型是最基础的进程状态模…...

新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
首次突破月交付2万辆规模的小鹏汽车,稳吗? 本周,高工智能汽车研究院发布的最新监测数据显示,2024年11月,小鹏汽车在国内市场(不含出口)交付量(上险口径,下同)…...

VideoPlayer插件的功能和用法
文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…...
.NET体系架构
引言 .NET是由微软开发的一个广泛应用的开发平台,旨在帮助开发者构建各种类型的应用程序,包括桌面应用、Web应用、移动应用和云服务。最初,.NET平台的构建主要集中在Windows环境上,但随着.NET Core和随后.NET 5及以上版本的推出&…...
QT中引入OpenCV库总结(qmake方式和cmake方式)
文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境,写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...
matlab系列专栏-快捷键速查手册
目录 1在命令窗口(Command Window)中 2. 在编辑器(Editor)(m文件)中 1在命令窗口(Command Window)中 1)【↑、↓】——切换到之前、之后运行过的命令,可以重复按多次来达到想要的命令。 2)【Tab】——自动补全。在Command窗口,…...
对于 NestJS + TypeORM 查询构造器分页功能的简单二次封装
NestJS 作为 Node.js 领域备受欢迎的框架,其与 TypeORM 的结合为开发者提供了强大的 ORM 能力,简化了数据库操作。然而,在处理分页查询时,直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此,我们可以通过…...
Kafka消息队列出现消息堆积如何解决
Kafka消息队列出现消息堆积,通常是由于消息生产速度远大于消费速度,可能由消费者处理能力不足、网络问题、Kafka配置不合理等原因导致。以下从多个方面介绍应对消息堆积的方法: 消费者端优化 提升消费并行度 增加消费者实例数量:…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

uniapp微信小程序视频实时流+pc端预览方案
方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度WebSocket图片帧定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐RTMP推流TRTC/即构SDK推流❌ 付费方案 (部分有免费额度&#x…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论
路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中(图1): mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

PydanticAI快速入门示例
参考链接:https://ai.pydantic.dev/#why-use-pydanticai 示例代码 from pydantic_ai import Agent from pydantic_ai.models.openai import OpenAIModel from pydantic_ai.providers.openai import OpenAIProvider# 配置使用阿里云通义千问模型 model OpenAIMode…...
shell脚本质数判断
shell脚本质数判断 shell输入一个正整数,判断是否为质数(素数)shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数) 思路: 1:1 2:1 2 3:1 2 3 4:1 2 3 4 5:1 2 3 4 5-------> 3:2 4:2 3 5:2 3…...