Elasticsearch入门CRUD(新增、查询、修改、删除)

来源:互联网 发布:直播软件收入排行榜 编辑:程序博客网 时间:2024/06/03 22:08

     IT交流互助QQ群:79190545    (Sql Server / Java / Asp.Net / C# / JS / Jquery / Oracle / My Sql / ) 
          -- 欢迎大家进来 聊天,交流 !!。(定期清理 不说话、潜水太深的同学)

1. 项目中引用 Elasticsearch.Net  

      Elasticsearch 其他版本可在: http://www.nuget.org/  找到对应的项目以源码 ! 

          本文以 2.4.1版本为例

      首先我们打开项目,点击-工具--》NuGet 包管理器--》程序包管理器控制台 

       在控制台输入安装命令:   Install-Package NEST -Version 2.4.1      (然后回车确认安装)

如图: 

 安装成功:



2.  项目中CRUD案例

       首先根据数据对象 创建Model 类。

            并且在字段属性上面加上 :  [JsonProperty("字段名")]

<span style="font-size:10px;">using Newtonsoft.Json;using System;using System.Collections.Generic;using System.Linq;using System.Runtime.Serialization;using System.Web;namespace WebApplication1.Models{    // [DataContract]    public class Orders    {      //  [DataMember]        [JsonProperty("OrderID")]  //Newtonsoft.Json  命名空间        public string OrderID { get; set; }        [JsonProperty("IsPackageOrder")]        public int IsPackageOrder { get; set; }        [JsonProperty("PackageOrderID")]        public string PackageOrderID { get; set; }        [JsonProperty("CRSResvID")]        public string CRSResvID { get; set; }        [JsonProperty("GuaranteeModeCode")]        public string GuaranteeModeCode { get; set; }        [JsonProperty("HotelID")]        public string HotelID { get; set; }        [JsonProperty("GuestSrcCode")]        public string GuestSrcCode { get; set; }        [JsonProperty("HotelDiscountCode")]        public string HotelDiscountCode { get; set; }        [JsonProperty("MemberCardTypeCode")]        public string MemberCardTypeCode { get; set; }        [JsonProperty("ResvRouteCode")]        public string ResvRouteCode { get; set; }        [JsonProperty("GuestID")]        public string GuestID { get; set; }        [JsonProperty("AgreementID")]        public string AgreementID { get; set; }        [JsonProperty("MemberCardNo")]        public string MemberCardNo { get; set; }        [JsonProperty("TeamID")]        public string TeamID { get; set; }        [JsonProperty("Amount")]        public string Amount { get; set; }        [JsonProperty("ContactName")]        public string ContactName { get; set; }        [JsonProperty("ContactMobile")]        public string ContactMobile { get; set; }        [JsonProperty("ContactPhone")]        public string ContactPhone { get; set; }        [JsonProperty("ContactFax")]        public string ContactFax { get; set; }        [JsonProperty("ContactEmail")]        public string ContactEmail { get; set; }        [JsonProperty("Remark1")]        public string Remark1 { get; set; }        [JsonProperty("Remark2")]        public string Remark2 { get; set; }        [JsonProperty("ResvTime")]        public string ResvTime { get; set; }        [JsonProperty("ResvCityCode")]        public string ResvCityCode { get; set; }        [JsonProperty("IsPrePaid")]        public int IsPrePaid { get; set; }        [JsonProperty("OrderStatusCode")]        public string OrderStatusCode { get; set; }        [JsonProperty("CancelReasonCode")]        public string CancelReasonCode { get; set; }        [JsonProperty("ConfirmTypeCode")]        public string ConfirmTypeCode { get; set; }        [JsonProperty("InputStartTime")]        public string InputStartTime { get; set; }        [JsonProperty("InputSpanMS")]        public int InputSpanMS { get; set; }        [JsonProperty("InputWorkNo")]        public string InputWorkNo { get; set; }        [JsonProperty("CreatedOn")]        public string CreatedOn { get; set; }        [JsonProperty("ModifiedBy")]        public string ModifiedBy { get; set; }        [JsonProperty("ModifiedOn")]        public string ModifiedOn { get; set; }        [JsonProperty("TimeStamp")]        public string TimeStamp { get; set; }        [JsonProperty("CRSOldResvRouteCode")]        public string CRSOldResvRouteCode { get; set; }        [JsonProperty("ActualDiscount")]        public float ActualDiscount { get; set; }        [JsonProperty("AgentName")]        public string AgentName { get; set; }        [JsonProperty("DiscountTypeTag")]        public int DiscountTypeTag { get; set; }        [JsonProperty("FixedPrice")]        public string FixedPrice { get; set; }        [JsonProperty("AgentCode")]        public string AgentCode { get; set; }        [JsonProperty("IsApartment")]        public int IsApartment { get; set; }        [JsonProperty("TeamProtocalID")]        public string TeamProtocalID { get; set; }        [JsonProperty("InvoiceTitle")]        public string InvoiceTitle { get; set; }        [JsonProperty("PointIncrementalTimes")]        public string PointIncrementalTimes { get; set; }        [JsonProperty("ResvType")]        public string ResvType { get; set; }    }}</span>


  

        /// <summary>        /// 创建客户端实例        /// </summary>        /// <returns></returns>        private static ElasticClient GetSearchClient()        {            //服务器IP地址: 端口号 。(Elasticsearch默认端口:9200)             var node = new Uri("http://192.168.210.31:9200");             var settings = new ConnectionSettings(node);            var client = new ElasticClient(settings);            //验证索引是否存在            if (!client.IndexExists("order").Exists)              {                client.CreateIndex("order");    //索引             }            //返回Elasticsearch 操作实例            return client;        }

2.1  新增  

     

<span style="font-size:10px;">           //操作ElasticSearch实例            ElasticClient client = GetSearchClient();            //新增对象实例化            Orders orderModel = new Orders();            //赋值            orderModel.OrderID = "79190545";            orderModel.ContactName = "IT交流互助 QQ群: 79190545";            //初始化插入对象            IIndexRequest<Orders> o = new IndexRequest<Orders>(                                                            "order",              //_index  :索引                                                            "orderhis",           //_type   :类型                                                             orderModel.OrderID   //_id     :标示ID                                                            )            {                Document = orderModel,  //新增数据对象            };            //调用新增            IIndexResponse inxResponse = client.Index(o);            if (inxResponse.IsValid)            {                //操作成功              }            else            {                //操作失败            }</span>

2.2  查询

<span style="font-size:32px;font-weight: bold;">     </span><span style="font-size:10px;">string key = "IT交流互助 群: 79190545";  // 需要查询的内容            int ix = 1; //当前页数            //实例化 ElasticSearch 操作对象            ElasticClient client = GetSearchClient();            //执行查询            var response = client.Search<Orders>(s => s                         .From((ix - 1) * 5)    //起始页                         .Size(5)               //每页条数                         .Query(q =>            //查询筛选条件                                                //这样就查询不出来                                                //    q.Wildcard(t => t.ContactName, string.Format("*{0}*", key.ToLower()))  ||                                                 //精确查找                                                // q.Term(t => t.OrderID, key.ToLower())                                                //|| q.Term(t => t.ContactMobile, key.ToLower())                                                //|| q.Term(t => t.ContactPhone, key.ToLower())                                                //模糊检索                                   q.Wildcard(t => t.OrderID, string.Format("*{0}*", key.ToLower()))                                  || q.Wildcard(t => t.ContactMobile, string.Format("*{0}*", key.ToLower()))                                  || q.Wildcard(t => t.ContactPhone, string.Format("*{0}*", key.ToLower()))                              //这样查询,默认分词检索(相当于  like '%第一个词%' or like '%第二个词%' or like '%第三个词%')                              //而实际情况只需要 查询  like '%韩世平%'                              //  q.Match(mq => mq.Field(f => f.OrderID).Analyzer(key.ToLower()))                              //|| q.Match(mq => mq.Field(f => f.ContactName == key))                              //|| q.Match(mq => mq.Field(f => f.ContactMobile).Query(key))                              //|| q.Match(mq => mq.Field(f => f.ContactPhone).Query(key))                               )             );            //查询出来的结果对象            List<Orders> ResultList = response.Documents.ToList();</span><span style="font-size:32px;font-weight: bold;"></span>


2.3   修改

<span style="font-weight: bold; font-size: 32px;">    </span><span style="font-size:10px;">//实例化 ElascticSearch 操作对象            ElasticClient client = GetSearchClient();            //实例化修改对象            Orders orderModel = new Orders()            {                ContactName = "IT交流互助 Q群: 79190545",    //需要修改的数据,不需要修改的可以不写            };            //实例化 请求修改对象            UpdateRequest<Orders, Orders> updRequest = new UpdateRequest<Orders, Orders>(                                                                                    "order",            //_index  :索引                                                                                    "orderhis",         //_type   :类型                                                                                    "R1401001950922"    //_id     :标示ID                                                                                    )            {                Doc = orderModel,   //需要求改的对象            };            //调用修改            IUpdateResponse<Orders> updResponse = client.Update<Orders>(updRequest);            if (updResponse.IsValid)            {                //操作成功              }            else            {                //操作失败            }</span>


2.4   删除

<span style="font-weight: bold; font-size: 32px;">    </span><span style="font-size:10px;">//实例化 ElascticSearch 操作对象            ElasticClient client = GetSearchClient();            //实例化删除请求对象            DocumentPath<Orders> docPath = new DocumentPath<Orders>(                                                                    "R1401001950922"    //_id   :标示ID                                                                    );            IDeleteResponse delResponse = client.Delete<Orders>(                                                                docPath,               //需要删除的对象                                                                p => p                                                                .Index("order")        //_index  :索引                                                                .Type("orderhis")      //_type   :类型                                                                );            if (delResponse.IsValid)            {                //操作成功              }            else            {                //操作失败            }</span><span style="font-weight: bold; font-size: 32px;"></span>



     IT交流互助QQ群:79190545    (Sql Server / Java / Asp.Net / C# / JS / Jquery / Oracle / My Sql / ) 
          -- 欢迎大家进来 聊天,交流 !!。(定期清理 不说话、潜水太深的同学)

2 0