面向云技术架构 - 痴者工良

  • 首页
  • 工良写的电子书
    • kubernetes 教程
    • 从 C# 入门 Kafka
    • 多线程和异步
    • 动态编程-反射、特性、AOP
    • 表达式树
  • 本站文章导航
  • 隐私政策
愿有人陪你颠沛流离
遇到能让你付出的事物或者人,都是一种运气。
能遇到,就该珍惜。或许你们最终没能在一起,但你会切实地感受到力量。
正因为这样,那段相遇才变得有价值,才没有辜负这世间的每一段相遇。
  1. 首页
  2. .NET
  3. 正文

C# ElasticSearch 简单使用方法

2022年12月29日 188点热度 0人点赞 0条评论
内容纲要

连接

如果不想对外暴露密码,可以自行写一个 AuthorizationHeader,只使用 Base64 处理后的 Basic 认证密钥。

using Elastic.Clients.Elasticsearch;
using Elastic.Transport;

public class Program
{
    public class Base64Auth : AuthorizationHeader
    {
        private readonly string _base;
        public Base64Auth(string baseStr)
        {
            _base = baseStr;
        }
        public override string AuthScheme => "Basic";

        public override bool TryGetAuthorizationParameters(out string value)
        {
            value = _base;
            return true;
        }
    }
    static async Task Main()
    {
        var settings = new ElasticsearchClientSettings(new Uri("http://192.168.111.111:9200"))
            .Authentication(new Base64Auth("1111111111="))
            // 连接成功后执行
            .OnRequestCompleted(handler =>
            {

            });
        var client = new ElasticsearchClient(settings);

    }
}

或者使用账号密码。

            .Authentication(new BasicAuthentication("elastic", "12345"));

账号密码转 Base64 的方法:

Convert.ToBase64String(Encoding.UTF8.GetBytes($"{username}:{password}"))

插入文档

向指定的索引插入一份文档,如果索引不存在,则会自动创建。

... ...
        var client = new ElasticsearchClient(settings);
        var tweet = new Tweet
        {
            Id = 1,
            User = "stevejgordon",
            PostDate = new DateTime(2009, 11, 15),
            Message = "Trying out the client, so far so good?"
        };

        var response = await client.IndexAsync(tweet, request => request.Index("my-tweet-index"));
        if (response.IsValidResponse)
        {
            Console.WriteLine($"Index document with ID {response.Id} succeeded.");
        }
    }
    public class Tweet
    {
        public int Id { get; set; }
        public string User { get; set; }
        public DateTime PostDate { get; set; }
        public string Message { get; set; }
    }

获取文档

获取刚刚插入的文档:

        var response = await client.GetAsync<Tweet>(1, idx => idx.Index("my-tweet-index"));
        var tweet = response.Source;

file

使用 Lambda 搜索文档以及分页:

        var client = new ElasticsearchClient(settings);
        var response = await client.SearchAsync<Tweet>(s => s
            .Index("my-tweet-index")
            .From(0)
            .Size(10)
            .Query(q => q
                .Term(t => t.User, "stevejgordon")
            )
        );

        if (response.IsValidResponse)
        {
            var tweet = response.Documents.FirstOrDefault();
        }

或使用 Json 格式的搜索方法:

        var client = new ElasticsearchClient(settings);
        var request = new SearchRequest("my-tweet-index")
        {
            From = 0,
            Size = 10,
            Query = new TermQuery("user") { Value = "stevejgordon" }
        };

        var response = await client.SearchAsync<Tweet>(request);

        if (response.IsValidResponse)
        {
            var tweet = response.Documents.FirstOrDefault();
        }

更新

更新指定 Id 条件的文档:

        Tweet tweet = new Tweet
        {
            Id = 1,
            User = "stevejgordon",
            PostDate = new DateTime(2009, 11, 15),
            Message = "Trying out the client, so far so good?"
        };
        tweet.Message = "This is a new message";

        var response = await client.UpdateAsync<Tweet, object>("my-tweet-index", 1, u => u
                .Doc(tweet));

        if (response.IsValidResponse)
        {
            Console.WriteLine("Update document succeeded.");
        }

删除文档

        var response = await client.DeleteAsync("my-tweet-index", 1);

        if (response.IsValidResponse)
        {
            Console.WriteLine("Delete document succeeded.");
        }
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: c elasticsearch 使用 方法 简单
最后更新:2022年12月29日

痴者工良

高级程序员劝退师

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

文章目录
  • 连接
  • 插入文档
  • 获取文档
  • 更新
  • 删除文档

COPYRIGHT © 2022 whuanle.cn. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

粤ICP备18051778号

粤公网安备 44030902003257号