栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

C# ES使用

C# ES使用

C#  ES开发记录

1、查询

ES表的人员实体

/// 

    /// 人员列表

    /// 

    public class TestESPersonDemo

    {

        /// 

        /// Id

        /// 

        public string Id { get; set; }

        /// 

        /// 姓名

        /// 

        public string Name { get; set; }

        /// 

        /// 身份证号

        /// 

        public string IdCardNO { get; set; }

        /// 

        /// 年龄

        /// 

        public string Age{ get; set; }

        /// 

        /// 添加时间

        /// 

        public string CreateTime{ get; set; }

    }

//定义查询条件列表

Var whereQueryList = new List, QueryContainer>>();

//1、等于查询

whereQueryList.Add(x => x.Term(p => p.Id , condition.Id ));

//2、In(List.contains)查询

whereQueryList.Add(x => x.Terms(p => p.Field(f => f.Id).Terms(condition.Ids)));

//3、日期查询: 查询范围:例如某一天

var startTime =CreateTime.AddDays(-1);

var endTime = =CreateTime.AddDays(1);

whereQueryList.Add(f => f.DateRange(p => p.Field(r => r.YearMonth).GreaterThan(startTime)));//大于

//whereQueryList.Add(f => f.DateRange(p => p.Field(r => r.YearMonth).GreaterThanOrEquals(startTime)));//大于等于

whereQueryList.Add(f => f.DateRange(p => p.Field(r => r.YearMonth).LessThan(endTime))); //小于

//4、模糊查询Like

//4.1、文字模糊查询    Operator:And和Or(ES是分词查询:例如输入的Name是”张三”,And:查询的是“张三”这两个字连着的数据,Or:查询是包含”张”或者”三”的数据)

whereQueryList.Add(x => x.Match(p => p.Field(f => f.Name).Query(condition.Name).Operator(Operator.And)));

//4.2、纯数字的字符串模糊查询,如身份证、手机号

//whereQueryList.Add(x => x.Wildcard(p => p.IdCardNo, "*" + condition.IdCardNo + "*"))//尽可能头部不加”*”。查询效率速度慢还很耗性能

whereQueryList.Add(x => x.Wildcard(p => p.IdCardNo, condition.IdCardNo + "*"));//注意,这种方式,查询响应比较慢

主要原因: wildcard类似mysql中的like,和分词完全没有了关系。

出现错误: 用户输入的字符串长度没有做限制,导致首尾通配符中间可能是很长的一个字符串。 后果就是对应的wildcard执行非常慢,非常消耗CPU。

根本原因: 为了加速通配符和正则表达式的匹配速度,Lucene4.0开始会将输入的字符串模式构建成一个DFA (Deterministic Finite Automaton),带有通配符的pattern构造出来的DFA可能会很复杂,开销很大。

可能的优化方案:

wildcard应杜绝使用通配符打头,实在不得已要这么做,就一定需要限制用户输入的字符串长度。

选用合适的分词器,比如nGram tokenizer预处理数据,然后使用更廉价的term query来实现同等的模糊搜索功能。

2、Kibana使用

2.1、查询

查询全部

GET TestESPersonDemo/_search

查询指定条件

GET TestESPersonDemo/_search

{

  "query":{

    "term": {

      "Id": {

        "value": "2"

      }

    }

  }

}

//同一字段多值查询

GET TestESPersonDemo/_search

{

  "query":{

    "terms": {

      "Id":  ["1","2","3"]

    }

  }

}

//多条件查询  must:且  should:或

//范围查询 gte 大于  lte小于

get tax_person/_search

{

  "query": {

    "bool": {

      "must": [

        {

          "match": {

            "idCardNo": "110101199003079753"

          }

        },

        {

          "match": {

            "Id": "3a01833b-78eb-7341-b662-c111ba703103"

          }

        }

      ],

      "must_not": [

        {"match": { "Name": "erji"}}

      ],

      "should": [

        {

          "match": {

            "Age":"18"

          }

        }

      ],

      "filter": [        

        {"range": {

          "CreateTime": {

             "gte": "2022-02-25T11:35:12.9947065+08:00",

            "lte": "2022-03-11T11:35:12.9947065+08:00"

          }

        }}

      ]

    }

  }

}#multi_match指定多个字段查找

Get TestESPersonDemo/_search

{

  "query":{

    "multi_match": {

      "query": "1",

      "fields": ["Age","Id"]

    }

  }

}

2.2、查询表结构

GET /TestESPersonDemo/_mapping

2.3删除单跳数据

DELETE /TestESPersonDemo/_doc/2

2.4删除所有数据

POST /TestESPersonDemo/_doc/_delete_by_query?pretty

{

    "query": {

        "match_all": {

        }

    }

}

2.5、添加修改数据(按ID更新数据)

PUT /TestESPersonDemo/_doc/2

{

    "Name" : "测试5",

    "IdCardNO" : "350102199003073870",

    "Id" : "2",

    "CreateTime" : "2022-02-15T11:35:12.9947065+08:00"

}

C#ES通用类demo-互联网文档类资源-CSDN下载

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/752458.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号