当前位置: 首页 > news >正文

Meilisearch ASP.Net Core API 功能demo

  1. 安装
MeiliSearch                 0.15.5   0.15.5
  1. 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…...

程序员独立开发竞品分析:确定网站使用什么建站系统

要确定一个网站使用的建站系统&#xff0c;可以通过以下几种方法尝试分析&#xff1a; 查看页面源代码&#xff1a; 打开网站&#xff0c;右键点击页面并选择“查看页面源代码”。在代码中查找一些常见的建站系统标志&#xff0c;例如&#xff1a; WordPress 的迹象&#xff1a…...

selenium+pyqt5自动化工具总结

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

docker GPU安装

docker 离线安装 docker下载地址&#xff1a;https://download.docker.com/linux/static/stable/x86_64/ 解压&#xff1a; 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 页面 &#xff08;1&#xff09;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库的源代码&#xff0c;编译生成对应的库文件和头文件。 我编译的放到了以下目录。 /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 这个命令是用来更新当前分支的&#xff0c;它会从远程仓库拉取更新&#xff0c;然后将你的本地提交重新应用到更新后的基础之上。它相当于先执行 git fetch&#xff0c;然后在当前分支上执行 git rebase origin/。使用 --rebase 而不是默认的 merge 可以…...

Leetcode​​​​​​​3270:求出数字答案

题目描述&#xff1a; 给你三个 正 整数 num1 &#xff0c;num2 和 num3 。 数字 num1 &#xff0c;num2 和 num3 的数字答案 key 是一个四位数&#xff0c;定义如下&#xff1a; 一开始&#xff0c;如果有数字 少于 四位数&#xff0c;给它补 前导 0 。答案 key 的第 i 个数…...

第十一章 施工监测

11 施工监测 11.1 施工监测主要内容、常用仪器与方法 11.1.1 主要内容 1.目的和意义 及时掌握工程自身及周边环境风险动态、通过分析和预测工程结构及周边环境的安全状态与发展趋势&#xff0c;优化调整设计参数和施工参数提供数据支撑。为今后同类工程施工提供类比资料 2…...

Python爬虫应用领域

Python爬虫作为一种强大的数据获取工具&#xff0c;在多个领域发挥着重要作用。以下是Python爬虫在不同领域的应用情况&#xff1a; 一、数据采集与分析 &#xff08;一&#xff09;市场调研 产品信息收集&#xff1a;爬取电商平台的产品详情、价格、销量、用户评价等数据&am…...

软件架构考试基础知识 002:进程的状态与其切换

进程状态转换的说明 在操作系统中&#xff0c;进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明&#xff1a; 1. 三态模型&#xff08;Three-state Model&#xff09; 三态模型是最基础的进程状态模…...

新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解

首次突破月交付2万辆规模的小鹏汽车&#xff0c;稳吗&#xff1f; 本周&#xff0c;高工智能汽车研究院发布的最新监测数据显示&#xff0c;2024年11月&#xff0c;小鹏汽车在国内市场&#xff08;不含出口&#xff09;交付量&#xff08;上险口径&#xff0c;下同&#xff09…...

VideoPlayer插件的功能和用法

文章目录 1. 概念介绍2. 使用方法2.1 实现步骤2.2 具体细节3. 示例代码4. 内容总结我们在上一章回中介绍了"如何获取文件类型"相关的内容,本章回中将介绍如何播放视频.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 播放视频是我们常用的功能,不过Flutter官方…...

.NET体系架构

引言 .NET是由微软开发的一个广泛应用的开发平台&#xff0c;旨在帮助开发者构建各种类型的应用程序&#xff0c;包括桌面应用、Web应用、移动应用和云服务。最初&#xff0c;.NET平台的构建主要集中在Windows环境上&#xff0c;但随着.NET Core和随后.NET 5及以上版本的推出&…...

QT中引入OpenCV库总结(qmake方式和cmake方式)

文章目录 前言opencv环境配置一、opencv库获取的两种方式二、qmake和cmake配置2.1、 qmake2.2、cmake2.2.1、引入opencv示例 三、qt与opencv对应关系四、问题 前言 我的软件环境&#xff0c;写在前面 Windows10QT5.12.12VS2017OpenCV4.5.4 opencv环境配置 一、opencv库获取…...

matlab系列专栏-快捷键速查手册

目录 1在命令窗口(Command Window)中 2. 在编辑器(Editor)&#xff08;m文件&#xff09;中 1在命令窗口(Command Window)中 1)【↑、↓】——切换到之前、之后运行过的命令&#xff0c;可以重复按多次来达到想要的命令。 2)【Tab】——自动补全。在Command窗口&#xff0c…...

对于 NestJS + TypeORM 查询构造器分页功能的简单二次封装

NestJS 作为 Node.js 领域备受欢迎的框架&#xff0c;其与 TypeORM 的结合为开发者提供了强大的 ORM 能力&#xff0c;简化了数据库操作。然而&#xff0c;在处理分页查询时&#xff0c;直接在每个服务方法中重复编写分页逻辑既不高效也容易出错。为此&#xff0c;我们可以通过…...

Kafka消息队列出现消息堆积如何解决

Kafka消息队列出现消息堆积&#xff0c;通常是由于消息生产速度远大于消费速度&#xff0c;可能由消费者处理能力不足、网络问题、Kafka配置不合理等原因导致。以下从多个方面介绍应对消息堆积的方法&#xff1a; 消费者端优化 提升消费并行度 增加消费者实例数量&#xff1a…...

脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)

一、数据处理与分析实战 &#xff08;一&#xff09;实时滤波与参数调整 基础滤波操作 60Hz 工频滤波&#xff1a;勾选界面右侧 “60Hz” 复选框&#xff0c;可有效抑制电网干扰&#xff08;适用于北美地区&#xff0c;欧洲用户可调整为 50Hz&#xff09;。 平滑处理&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引&#xff0c;可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度&#xff08;创建索引的主要原因&#xff09;。3. 可以加速表和表之间的连接&#xff0c;实现数据的参考完整性。4. 可以在查询过程中&#xff0c;…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#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&#xff1f; IPsec VPN 5.1 IPsec传输模式&#xff08;Transport Mode&#xff09; 5.2 IPsec隧道模式&#xff08;Tunne…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Go 语言并发编程基础:无缓冲与有缓冲通道

在上一章节中&#xff0c;我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道&#xff0c;它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好&#xff0…...

【无标题】路径问题的革命性重构:基于二维拓扑收缩色动力学模型的零点隧穿理论

路径问题的革命性重构&#xff1a;基于二维拓扑收缩色动力学模型的零点隧穿理论 一、传统路径模型的根本缺陷 在经典正方形路径问题中&#xff08;图1&#xff09;&#xff1a; mermaid graph LR A((A)) --- B((B)) B --- C((C)) C --- D((D)) D --- A A -.- C[无直接路径] B -…...

PydanticAI快速入门示例

参考链接&#xff1a;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输入一个正整数,判断是否为质数(素数&#xff09;shell求1-100内的质数shell求给定数组输出其中的质数 shell输入一个正整数,判断是否为质数(素数&#xff09; 思路&#xff1a; 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…...