当前位置: 首页 > 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

http://www.lryc.cn/news/519392.html

相关文章:

  • 程序员独立开发竞品分析:确定网站使用什么建站系统
  • selenium+pyqt5自动化工具总结
  • docker GPU安装
  • hutool糊涂工具通过注解设置excel宽度
  • Three.js教程015:全面讲解Three.js的UV与应用
  • IOS界面传值-OC
  • 阿里mod_asr3.0集成webrtc静音算法
  • [Git] git pull --rebase / git rebase origin/master
  • Leetcode​​​​​​​3270:求出数字答案
  • 第十一章 施工监测
  • Python爬虫应用领域
  • 软件架构考试基础知识 002:进程的状态与其切换
  • 新车月交付突破2万辆!小鹏汽车“激活”智驾之困待解
  • VideoPlayer插件的功能和用法
  • .NET体系架构
  • QT中引入OpenCV库总结(qmake方式和cmake方式)
  • matlab系列专栏-快捷键速查手册
  • 对于 NestJS + TypeORM 查询构造器分页功能的简单二次封装
  • Kafka消息队列出现消息堆积如何解决
  • LeetCode hot100-100
  • Vue.js:现代前端开发的灵活框架
  • CUDNN详解
  • 下载并安装MySQL
  • Linux ffmpeg 基础用法
  • 【C++入门】详解(中)
  • 深度学习的加速器:Horovod,让分布式训练更简单高效!
  • 计算机的错误计算(二百零八)
  • 海康机器人IPO,又近了一步
  • 【环境搭建】Metersphere v2.x 容器部署教程踩坑总结
  • 系统看门狗配置--以ubuntu为例