Docker安装 Elasticsearch + C# 如何使用

安装 Elasticsearch

docker pull elasticsearch:8.6.0

创建挂载点目录

mkdir -p /usr/local/es/data /usr/local/es/config /usr/local/es/plugins

有必要的话,设置目录权限:

chmod 777  /usr/local/es/data
chmod 777  /usr/local/es/plugins

运行容器指令:

docker run -d \
--restart=always \
--name es \
-p 9200:9200 \
-p 9300:9300 \
-v /usr/local/es/data:/usr/share/elasticsearch/data \
-v /usr/local/es/plugins:/usr/share/elasticsearch/plugins \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
elasticsearch:8.6.0

关闭 密码安全验证

到config目录下,打开 elasticsearch.yml ,把 xpack.security.enabled 改为 false

安装IK分词器

进入docker容器 : docker exec -it es /bin/bash
输入命令:

./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v8.6.0/elasticsearch-analysis-ik-8.6.0.zip

然后重启容器生效。

C# 如何使用

引入nuget包:Elastic.Clients.Elasticsearch

连接

            var settings = new ElasticsearchClientSettings(new Uri("http://localhost:9200"));

            ElasticsearchClient client = new ElasticsearchClient(settings);

插入数据

            for (int i = 0; i < 100; i++)
            {
                client.Index<Document>(new Document
                {
                    Id = 2 + i,
                    Name = "test" + (2 + i),
                    Content = "不断测试我的" + i + "多个文章内容",
                    Time = DateTime.Now.AddMinutes(i + 1)
                }, "document");
            }

更新数据

         doc.Content += " 附加的。";
         var response_update = await client.UpdateAsync<Document, Document>("document", 1, u => u.Doc(doc));

删除数据

    var response = await client.DeleteAsync("document", 1);

获取数据

var response = await client.GetAsync<Document>(id, idx => idx.Index("document"));

if (response.IsValidResponse)
{
    var doc = response.Source;
}

搜索数据(相等判断)

            var response_search = await client.SearchAsync<Document>(s => s
                .Index("document")
                .From(0)
                .Size(10)
                .Query(q => q
                    .Term(t => t.Name, "test2")
                )
     
            );

搜索数据(全文检索)

            var searchResponse = client.Search<Document>(s => s
	            .Index("document")
	            .From(0)
	            .Size(10)
	            .Query(q => q
	                 .Match(m => m
	                     .Field(f => f.Content) // 替换为你的实际字段名
	                     .Query("测试内容")
	                 )
	             )
	            .Sort(sort => sort
	                .Field(f => f.Time, d => d.Order(SortOrder.Desc)) // 按时间降序排序
	            )
           );

or 条件语句

            var response_search = await client.SearchAsync<Document>(s => s
                .Index("document")
                .From(0)
                .Size(10)
                .Query(q => q
                    .Bool(b=>b
                        .Should(
                            s => s.Term(t => t.Name, "test2"),
                            s => s.Term(t => t.Name, "test3")
                        )
                    )
                )
     
            );

自定义字段检索类型

            var createIndexResponse = client.Indices.Create("document", c => c
                .Mappings(ms => ms
                        .Properties<Document>(props => props
                            .Text(t => t.Content) // 设置为文本类型,进行全文检索
                            .Keyword(k => k.Name)// 设置为关键字类型,不进行全文检索
                            .DateRange(n => n.Time)
                        )
                  )
            );
  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值