首页 > 其他分享 >Elasticsearch.Net+Nest基本用法

Elasticsearch.Net+Nest基本用法

时间:2023-03-31 11:25:01浏览次数:42  
标签:field Nest value Field Elasticsearch var Net your must

基本用法

  • 安装Nest(安装后默认会装上Elasticsearch.Net),注意:版本尽量选择跟ES版本一致的

  • 批量初始化数据到ES

using Nest;

try
{
  // 测试环境配置SSL证书需要的设置
  ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls | SecurityProtocolType.Ssl3;
  ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback((object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors) => { return true; });

  // 批量初始化数据到ES
  var uri = new Uri(ElasticsearchUrl);
  var setting = new ConnectionSettings(uri)
      .DisableDirectStreaming()// 默认情况下,请求和响应字节在调试信息中不可用,但可以通过设置DisableDirectStreaming在“连接设置”上全局启用
      .RequestTimeout(TimeSpan.FromSeconds(30))
      .DefaultFieldNameInferrer(name => name)// 按字段命初始化,防止IndexMany出现大小写字段名问题
      .BasicAuthentication(UserName, Password)// 设置账号密码
      .DefaultIndex("order")
      ;
  var client = new ElasticClient(setting);// 初始化ES客户端
  var orders = GetOrders();// 从关系库获取你要初始化进ES的数据
  var result = client.IndexMany(orders);
  if (result.IsValid)
  {
      Console.WriteLine("success");
  }
  else
  {
      Console.WriteLine("fail");
  }
}
catch (Exception ex)
{

}
  • 删(官方抛弃过,实际使用会有点问题,实际开发中可以根据id去删除比较好,如果自定义Id在从关系库取数据的时候就能拿到Id了,不是自定义Id的话则要查询一次获取Id)
client.DeleteByQuery<ElasticsearchOrder>(d => d
    .Query(q => q
        .Match(m=>m.Field("Name").Query("DHL"))
    )
);
client.UpdateByQuery<ElasticsearchOrder>(u => u
    .Query(q => q
        .Match(m => m.Field("Name").Query("DHL"))
    )
);
var must = new List<Func<QueryContainerDescriptor<ElasticsearchOrder>, QueryContainer>>();
// 查询单字段
must.Add(a=>a
    .Match(m=>m.Field("your field").Query("your value"))
);

// 查询 &&
must.Add(a => a
    .Bool(b=>b
        .Must(
            m => m.Match(h => h.Field("your field").Query("your value")),
            m => m.Match(h => h.Field("your field").Query("your value"))
        )
    )
);

// 查询日期
must.Add(a => a
    .DateRange(r => r
        .Field("your field").GreaterThanOrEquals(Convert.ToDateTime("your value"))
    )
);

// 查询日期区间
must.Add(a => a
    .Bool(b => b
        .Must(
            m => m.DateRange(r => r.Field("your field").GreaterThanOrEquals(Convert.ToDateTime("start time"))),
            m => m.DateRange(r => r.Field("your field").LessThanOrEquals(Convert.ToDateTime("end time")))
        )
    )
);

// 查询数值区间
must.Add(a => a
    .Bool(b => b
        .Must(
            m => m.Range(r => r.Field("your field").GreaterThanOrEquals(Convert.ToDouble("your value"))),
            m => m.Range(r => r.Field("your field").LessThanOrEquals(Convert.ToDouble("your value")))
        )
    )
);

// 模糊查询(这个方式性能可能不好,还没展开细细研究)
var value = "your value";
must.Add(a => a
    .Wildcard(w => w
        .Field("PONO").Value($"*{value}*")
    )
);

// 查询空字段
must.Add(a => a
    .Bool(b => b
        .Must(
            m => m.Range(r => r.Field("your field").GreaterThan(0)
        )
    )
));

// 查询某对象为null或者某字段有多个值
must.Add(a => a
    .Bool(b => b
        .Should(s => s
            .Bool(
                l => l.MustNot(m => m.Exists(e => e.Field("your entity")))), 
                l => l.Terms(t => t.Field("your field").Terms("your value")
            )
        )
    )
);

var from = 0;
var take = 10;
var should = new List<Func<QueryContainerDescriptor<ElasticsearchOrder>, QueryContainer>>();//如果有 || 需求使用
var res = client.Search<ElasticsearchOrder>(sd =>
    sd.Query(q => q.Bool(b => b.Must(must).Should(should)))
    .From(from)
    .Take(take)
    .Sort(s => s.Descending("InputTime"))
    .TrackTotalHits(true)
);
if (res.IsValid)
{

}
else
{

}

标签:field,Nest,value,Field,Elasticsearch,var,Net,your,must
From: https://www.cnblogs.com/BOSET/p/17275702.html

相关文章

  • 新Apple TV支持Netflix直接注册、iTunes账户付费
    今天凌晨,苹果发布了新款机顶盒AppleTV。升级后的AppleTV允许用户直接从该设备上注册Netflix,使用iTunes账户支付该流服务订阅费用。据路透社昨天报道,Hastings最近在寻求与付费电视运营商合作,希望能捆绑其服务,通过有线电视运营商的机顶盒提供电影电视节目。据知情人士透露,对Netfl......
  • 界面组件Telerik ASP.NET MVC使用指南 - 如何自定义网格过滤(一)
    TelerikUIforASP.NETMVC拥有使用JavaScript和HTML5构建网站和移动应用所需的70+UI部件,来满足开发者的各种需求,提供无语伦比的开发性能和用户体验。它主要是针对专业级的ASP.NET开发,通过该产品的强大功能,开发者可以开发出功能丰富、适应标准广泛的响应式应用程序。对于任何......
  • broadcom Ethernet BCM57412 驱动更新记录(dkms方式)
    一背景现场DellR740xd2机器使用网卡Broadcom5741210GbSFP+,固件版本22.21.06.80。bnxt_en.ko内核模块是该网卡的驱动,我们默认的驱动版本为1.8.0,而固件版本22.21.06.80需要1.10.2的driver。本文主要是记录一些操作步骤,后续出现类似驱动过旧的问题可以快速解决。二临时解......
  • THM-Skynet(天网)
    侦查对靶机进行端口扫描开放有445\文件共享服务,使用nmap枚举该服务共享的文件夹nmap--script=smb-enum-users,smb-enum-shares-p44510.10.46.75枚举出两个重要的目录anonymous、milesdyson也可以使用smbclient-L//10.10.46.75该命令进行枚举访问anonymous任何人都......
  • centos7安装elasticsearch
    下载安装包,这里有一个分词器,第二个是es6安装包解压yum-yinstallunzip#安装解压缩软件unzipelasticsearch-6.8.6.zip#解压缩esunzipanalysis-icu-6.8.6.zip-delasticsearch-6.8.6/plugins/analysis-icu-6.8.6#解压缩分词器到插件目录mvelasticsearch-6.8......
  • m基于FC全卷积网络和kalman的遮挡车辆跟踪算法matlab仿真,用matconvnet-1.0-beta20工
    1.算法描述1.1全卷积神经网络全卷积神经网络(FullyConvolutionalNetworks,FCN)是JonathanLong等人于2015年在FullyConvolutionalNetworksforSemanticSegmentation一文中提出的用于图像语义分割的一种框架,是深度学习用于语义分割领域的开山之作。我们知道,对于一个各层参数结......
  • CentOS7 Docker安装 ElasticSearch8、Kibana8
    一、Docker安装yuminstall-ydocker#开机自启systemctlenabledocker#启动dockersystemctlstartdocker二、安装ElasticSearchdockerpulldocker.elastic.co/elasticsearch/elasticsearch:8.6.2vi/etc/sysctl.conf在/etc/sysctl.conf文件最后添加一行vm.ma......
  • 二、Elasticsearch部署
    第一次安装的是7.0版本,运维过程中发现与8.0还是有很多不同的地方下载javajdk:环境设置下载ES:解压压缩包修改yml允许跨域,为后面head做准备config->elasticsearch.yml增加下面配置(注意格式,:后面必须跟空格,结束不能带;号)http.cors.enabled:truehttp.cors.allow-ori......
  • .Net(C#) RSA分段加密和解密
    //密钥为pem格式publicclassEncryptUtils{privateconstint_maxEncryptSize=117;privateconstint_maxDecryptSize=256;pub......
  • asp.net webapi2.0文件上传
    [Route("api/uploadFile")]publicReturnMessagePostFile(stringsaveDirName){HttpRequesthttpRequest=HttpContext.Current......