.net Elasticsearch入门实例详解

1. 什么是Elasticsearch?

Elasticsearch是一个基于Lucene库的分布式搜索和分析引擎,由于其快速、开放、可扩展和易于管理的特点而广受欢迎。它提供RESTful API,用于处理大量数据和复杂查询,满足服务器日志、社交媒体、商务分析等数据分析的需求。用户可以使用Java、.NET、PHP、Python、Ruby等多种语言与之交互。

2. Elasticsearch的安装和配置

2.1 安装和配置Java环境

在安装Elasticsearch之前,需要首先安装好Java环境。可以从Oracle官网下载Java SE Development Kit(JDK)的最新版本,安装并配置JAVA_HOME等环境变量。

// 检查Java版本

java -version

// 配置环境变量

export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-14.jdk/Contents/Home

2.2 下载和解压Elasticsearch

从Elasticsearch官网下载最新版本,解压缩到指定目录中。

// 下载并解压缩Elasticsearch

curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.10.2-darwin-x86_64.tar.gz

tar -xvf elasticsearch-7.10.2-darwin-x86_64.tar.gz

// 进入解压目录

cd elasticsearch-7.10.2/

2.3 启动Elasticsearch

使用bin/elasticsearch命令启动Elasticsearch。

// 启动Elasticsearch

bin/elasticsearch

2.4 验证Elasticsearch是否启动成功

打开浏览器访问 http://localhost:9200,如果返回了类似如下结果,说明Elasticsearch已经启动成功。

{

"name" : "my-node",

"cluster_name" : "my-cluster",

"cluster_uuid" : "dX2IwmJaTH6R19lkyFO_qw",

"version" : {

"number" : "7.10.2",

"build_flavor" : "default",

"build_type" : "tar",

"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",

"build_date" : "2021-01-13T00:42:12.435326Z",

"build_snapshot" : false,

"lucene_version" : "8.7.0",

"minimum_wire_compatibility_version" : "6.8.0",

"minimum_index_compatibility_version" : "6.0.0-beta1"

},

"tagline" : "You Know, for Search"

}

3. 使用Elasticsearch进行数据操作

3.1 索引操作

Elasticsearch中的索引类似于传统数据库中的表。索引可以通过PUT命令创建。

// 创建索引

PUT /my_index

{

"settings": {

"number_of_shards": 5, // 分片数

"number_of_replicas": 1 // 副本数

},

"mappings": {

"properties": {

"name": {

"type": "text", // 字段类型

"index": true // 是否索引

},

"age": {

"type": "integer"

}

}

}

}

3.2 文档操作

在Elasticsearch中,索引和文档是基本的数据单位。每个文档都有一个唯一的标识符和相应的字段。

// 创建文档

PUT /my_index/_doc/1

{

"name": "John",

"age": 30

}

// 获取文档

GET /my_index/_doc/1

// 更新文档

POST /my_index/_update/1

{

"doc": {

"age": 31

}

}

// 删除文档

DELETE /my_index/_doc/1

3.3 查询操作

Elasticsearch提供了多种查询方式,如match、bool、term、range等。

// match查询

GET /my_index/_search

{

"query": {

"match": {

"name": "John"

}

}

}

// bool查询

GET /my_index/_search

{

"query": {

"bool": {

"must": [

{

"match": {

"name": "John"

}

},

{

"range": {

"age": {

"gte": 30,

"lte": 40

}

}

}

]

}

}

}

// term查询

GET /my_index/_search

{

"query": {

"term": {

"name.keyword": "John"

}

}

}

// range查询

GET /my_index/_search

{

"query": {

"range": {

"age": {

"gte": 30,

"lte": 40

}

}

}

}

4. .NET中使用Elasticsearch

4.1 安装Elasticsearch.NET插件

Elasticsearch.NET是Elasticsearch官方提供的.NET客户端库,方便进行数据交互。可以通过NuGet包管理器安装最新版本的Elasticsearch.NET。

Install-Package Elasticsearch.Net

4.2 初始化Elasticsearch连接

在使用Elasticsearch.NET之前,需要首先初始化Elasticsearch连接。

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

var settings = new ConnectionSettings(node);

var client = new ElasticClient(settings);

4.3 索引操作

使用Elasticsearch.NET进行文档索引操作,包括创建索引、创建文档、更新文档和删除文档。

// 创建索引

var createIndexResponse = client.Indices.Create("my_index", c => c

.Settings(s => s

.NumberOfShards(5)

.NumberOfReplicas(1)

)

.Map(m => m

.Properties(p => p

.Text(t => t.Name("name"))

.Number(n => n.Name("age").Type(NumberType.Integer))

)

)

);

// 创建文档

var indexResponse = client.Index(new { name = "John", age = 30 }, i => i

.Index("my_index")

.Id(1)

);

// 更新文档

var updateResponse = client.Update(new { age = 31 }, u => u

.Index("my_index")

.Id(1)

);

// 删除文档

var deleteResponse = client.Delete(new DeleteRequest("my_index", 1));

4.4 查询操作

使用Elasticsearch.NET进行查询操作,包括match查询、bool查询、term查询和range查询。

// match查询

var searchResponse1 = client.Search(s => s

.Index("my_index")

.Query(q => q

.Match(m => m

.Field("name")

.Query("John")

)

)

);

// bool查询

var searchResponse2 = client.Search(s => s

.Index("my_index")

.Query(q => q

.Bool(b => b

.Must(

m => m.Match(mq => mq.Field("name").Query("John")),

m => m.Range(r => r.Field("age").GreaterThanOrEquals(30).LessThanOrEquals(40))

)

)

)

);

// term查询

var searchResponse3 = client.Search(s => s

.Index("my_index")

.Query(q => q

.Term(t => t

.Field("name.keyword")

.Value("John")

)

)

);

// range查询

var searchResponse4 = client.Search(s => s

.Index("my_index")

.Query(q => q

.Range(r => r

.Field("age")

.GreaterThanOrEquals(30)

.LessThanOrEquals(40)

)

)

);

5. 总结

本文介绍了Elasticsearch的基本概念、安装和配置以及在.NET中使用Elasticsearch进行数据操作和查询的方法。Elasticsearch.NET客户端库为我们提供了方便的接口,使得使用.NET编程语言开发Elasticsearch应用变得更加容易。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签