时间轻松学会.NET Core操作ElasticSearch7的方法(2)

在ES搜索中,一般会存在多个条件,类似于sql的and or等操作。在ES中使用bool操作来连接多个条件,must 必须满足,should:满足最好,不满足也没关系(如果满足,es的搜索评分会更高,结果更靠前)

GET /qingcheng/_search { "query": { "bool": { "must": [ { "match": { "name": "青" } }, { "range": { "age": { "gte": 10, "lte": 50 } } } ], "should": [ { "range": { "age": { "gte": 10, "lte": 50 } } } ] } } }

聚合

在ES中,聚合使用eggs来操作。可快速求出最大、平均、等值。

GET /qingcheng/_search { "aggs": { "平均值": { "avg": { "field": "age" } } } }

配置中文分词器

ES默认的分词器是中文分词是按单个汉字分割。所以使用起来搜索结果不太准确。在ES的分词插件中,中文分词用的比较多的是IK分词器

github地址:https://github.com/medcl/elasticsearch-analysis-ik

下载好ES对应版本的插件,解压出来,放到ES的插件目录。重启ES,即可启用插件。

时间轻松学会.NET Core操作ElasticSearch7的方法

我们对比一下使用ES默认分词器和IK分词器的结果

默认分词器

时间轻松学会.NET Core操作ElasticSearch7的方法

使用IK分词器

IK分词器支持两种分词模式 1. ik_smart 2.ik_max_word

ik_smart模式

时间轻松学会.NET Core操作ElasticSearch7的方法

ik_max_word

时间轻松学会.NET Core操作ElasticSearch7的方法

两种分词模式的区别在于分词粒度的粗细问题。而standard分词直接按单个字符分割。

使用.NET Core的NEST客户端

ES的.NET客户端分为两个,一个是ElasticSearch.NET一个是NEST,NEST是高级的客户端库,提供更符合.NET程序员的操作api。ElasticSearch.NET更适合喜欢写DSL的程序员。一般我们都使用NEST。

创建索引

[ElasticsearchType(RelationName = "estest")] class ESTest { [Number(NumberType.Integer, Name = "id")] public int Id { get; set; } [Text(Name = "name")] public string Name { get; set; } [Number(NumberType.Integer, Name = "age")] public int Age { get; set; } [Text(Name = "info", Analyzer = "ik_smart")] public string Info { get; set; } [Date(Name = "createtime", Format = "yyyy-MM-dd||yyyy-MM-dd HH:mm:ss")] public DateTime CreateTime { get; set; } } var node = new Uri("http://localhost:9200"); var settings = new ConnectionSettings(node); var client = new ElasticClient(settings); //创建索引 var resp = client.Indices.Create("test", opt => { return opt.Map<ESTest>(m => m.AutoMap()); }); Console.WriteLine("创建索引结果:" + resp.Acknowledged); Console.WriteLine(resp.DebugInformation);

插入数据

var model = new ESTest() { Name = "青城1", Age = 20, Info = "顺其自然,不代表我们可以不努力,而是努力之后有勇气接受成败。", Id = 2, CreateTime = DateTime.Now }; var indexResp = client.Index(model, i => i.Index("test")); if (indexResp.IsValid) { }

检索数据

var res = client.Search<ESTest>(a => a.Index("test") .Query(a => a.Match(m => m.Field(f => f.Info).Query("顺其自然")))); foreach (var item in res.Documents) { Console.WriteLine(item.Name + " " + item.Info); }

检索数据的写法基本上和DSL语法结构一致。学会DSL,用C#也可以写出正确的查询语句。

学会以上的基本操作,就可以算是对ES有一个基本的了解了。更多深入的知识点可以去ES官方文档学习。

NEST库地址:https://github.com/elastic/elasticsearch-net

官方文档:https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/introduction.html

到此这篇关于时间轻松学会.NET Core操作ElasticSearch7的方法的文章就介绍到这了,更多相关.NET Core操作ElasticSearch 7内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyggfw.html