ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Asp.Net Core 中使用Nest:6.5.1框架查询ElasticSearch数据,使用小结。

2019-07-31 14:08:05  阅读:470  来源: 互联网

标签:Core Asp Name Nest 分词 Query var new Id


模型类:

public class Computer
    {
        public int Id { get; set; }
        public string Name { get; set; }

        public string OtherInfo { get; set;}
    }

插入数据:

数据太多,插入时可能有些不成功。

索引要全为小写

var nodes = "http://192.168.50.233:9200/".Split(';').Select(t => new Uri(t));
            var pool = new StaticConnectionPool(nodes);
            var connectionSettings = new ConnectionSettings(pool);
            var es = new ElasticClient(connectionSettings);

            Computer cp1 = new Computer { Id = 5, Name = "神州笔记本1", OtherInfo = "5" };
            Computer cp2 = new Computer { Id = 2, Name = "联想笔记本1", OtherInfo = "2" };
            Computer cp3 = new Computer { Id = 3, Name = "戴尔笔记本1", OtherInfo = "3" };
            Computer cp4 = new Computer { Id = 4, Name = "惠普笔记本1", OtherInfo = "4" };
            List<Computer> cps = new List<Computer> { cp1, cp2, cp3, cp4 };

            //http://192.168.50.233:9200/realyuseit/computer/_search?typed_keys=true
            Result result = Result.NotFound;
            int n = 0;
            cps.ForEach(cp =>
            {
                result = es.Index(cp, t =>
                               t.Index("realyuseit")
                               .Type(TypeName.Create<Computer>())
                               .Id(cp.Id)
                ).Result;
                if (result == Result.Created || result == Result.Updated) n++;
            });
            Console.WriteLine(n);

查询:

var nodes = "http://192.168.50.233:9200/".Split(';').Select(t => new Uri(t));
            var pool = new StaticConnectionPool(nodes);
            var connectionSettings = new ConnectionSettings(pool);
            var es = new ElasticClient(connectionSettings);
            bool eb = es.IndexExists("realyuseit").Exists;
            var result = es.Search<Computer>(x =>
                                    x.Index("realyuseit")
                                    //.Query(q => q.Match(m => m.Field(f => f.Name).Query("其他笔记本6"))) //单字段全文关键字检索 只要Name中包含值即可,且自带分词 4条数据符合
                                    //.Query(q => q.MultiMatch(m => m.Fields(fd=>fd.Fields(f=>f.Name,f=>f.OtherInfo)).Query("1神23456789"))) //多字段全文关键字检索 Name或OtherInfo包含该值即可,且自带分词 4条数据符合
                                    //.Analyzer("") // 该分词方法可不需要,因为上面的查询自带分词
                                    //.Query(q => q.Bool(b=>b.Must(m=>m.Term(p=>p.Field(f=>f.Id).Value(4)))))  //条件必须符合,无分词,有一些数据类型可能查询失败
                                    //.Query(q => q.Range(c => c.Field(f => f.Id).LessThanOrEquals(5).GreaterThanOrEquals(3))) //范围查询
                                    .Sort(t => t.Ascending(p=>p.Id)) //id升序
                                    //.From(0) //分页
                                    //.Size(3)
            );
            //以第二次为准,es的特点大家也都知道,我一个小菜鸟还不知道怎么解决,不过查2次够我用了
            if (result.Documents.Count == 0)
            {
                result = es.Search<Computer>(x =>
                                    x.Index("realyuseit")
                                    //.Query(q => q.Match(m => m.Field(f=>f.Name).Query("其他笔记5本6"))) //单字段全文关键字检索 只要Name中包含该值即可,且自带分词
                                    //.Query(q => q.MultiMatch(m => m.Fields(fd => fd.Fields(f => f.Name, f => f.OtherInfo)).Query("1神23456789"))) //多字段全文关键字检索 Name或OtherInfo包含该值即可,且自带分词
                                    //.Analyzer("")  // 该分词方法可不需要,因为上面的查询自带分词
                                    //.Query(q => q.Bool(b => b.Must(m => m.Term(p => p.Field(f => f.Id).Value(4))))) //条件必须符合的查询,无分词,有一些数据类型可能查询失败
                                    //.Query(q=>q.Range(c=>c.Field(f=>f.Id).LessThanOrEquals(5).GreaterThanOrEquals(3))) //范围查询
                                    .Sort(t => t.Ascending(p => p.Id))
                                    //.From(0) //分页
                                    //.Size(3)
                         );

                //多个条件一起搜索,例子如下
                //var matchQuery = new List<Func<QueryContainerDescriptor<Computer>, QueryContainer>>
                //{
                //    must => must.Bool(b => b.Must(m => m.Term(p => p.Field(f => f.Id).Value(5)),
                //                                    m => m.Term(p => p.Field(f => f.Name).Value("神州笔记本1"))
                //                                 )
                //                     ),
                //    range => range.Range(c => c.Field(p => p.Id).LessThanOrEquals(5).GreaterThanOrEquals(3))
                //};
                //var tr = es.Search<Computer>(x=>x.Index("realyuseit").Query(q=>q.Bool(b=>b.Must(matchQuery))));

            }
            var res = result.Documents.ToList();
            var rb = true;

删除索引及删除数据,还有点问题没有解决,暂时不发。

 

 

 

标签:Core,Asp,Name,Nest,分词,Query,var,new,Id
来源: https://blog.csdn.net/qq_38261174/article/details/97911363

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有