http://blog.csdn.net/wulex/article/details/52138564

  1. 加数据
  2. //在调用下面的index方法的时候,如果没有指定使用哪个index,ElasticSearch会直接使用我们在setting中的defaultIndex,如果没有,则会自动创建
  3. var index = client.Index(person);
  4. return index.Created;
  5. }
  6. catch (Exception ex)
  7. {
  8. Console.WriteLine(" Excepton Message : " + ex.Message);
  9. }
  10. return false;
  11. }
  12. public List<PersonDetail> GetAll()
  13. {
  14. var searchResults = client.Search<PersonDetail>(s => s
  15. .From(0)
  16. .Size(10000)
  17. );
  18. return searchResults.Documents.ToList();
  19. }
  20. public List<PersonDetail> GetEntities(string keyword)
  21. {
  22. var client = new ElasticClient(Setting.ConnectionSettings);
  23. #region 全文搜索
  24. keyword = String.Format("*{0}*", keyword);
  25. //默认的Operator是Or,当keyword是类似于"One Two"之类的中间有空格的时候,会被当成两个关键词搜索,然后搜索结果进行or运算
  26. //所以我们需要根据需求来调整Operator
  27. var searchResults = client.Search<PersonDetail>(s => s
  28. .Index("elastic-search-app")
  29. .Query(q => q.QueryString(qs => qs.Query(keyword).DefaultOperator(Operator.And)))
  30. );
  31. //--------------------------------------------------------------------------------------
  32. //另外由于ES是分词搜索,所以当我们要用"One"来搜索完整的单词"JustOne"的时候,就必须在"One"外面添加**,类似于SQL里面的%keyword%,但是这样的做法会导致在用完整的单词来搜索的时候搜索不到结果,所以我们需要使用下面的方式
  33. //wholeKeyword = keyword;
  34. //keyword = String.Format("*{0}*", keyword);
  35. //QueryContainer query = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And };
  36. //if (!String.IsNullOrEmpty(wholeKeyword))
  37. //{
  38. //    QueryContainer wholeWordQuery = new QueryStringQuery() { Query = wholeKeyword };
  39. //    query = query || wholeWordQuery;
  40. //}
  41. //var searchResults = client.Search<Person>(s => s
  42. //    .Index("zhixiao-application")
  43. //    .Query(query)
  44. //);
  45. #endregion
  46. #region 指定属性搜索
  47. //使用term Query
  48. //Term是一个被索引的精确值,也就是说Foo, foo, FOO是不相等的,因此
  49. //在使用term query的时候要注意,term query在搜索的Field已经被索引的时候,是不支持大写的。
  50. // QueryContainer query2 = new TermQuery { Field = item.Key, Value = item.Value.ToLower() };
  51. //--------------------------------------------------------------------------------------
  52. //var searchResults = client.Search<PersonDetail>(s => s
  53. //    .Index("elastic-search-app")
  54. //    .Query(q => q.Term(t => t.OnField(f => f.LastName == "keyword")))
  55. //);
  56. //效果同上
  57. //QueryContainer termQuery = new TermQuery { Field = "lastname", Value = "keyword" };
  58. //var searchResults = client.Search<PersonDetail>(s => s
  59. //    .Index("elastic-search-app")
  60. //    .Query(termQuery)
  61. //);
  62. //--------------------------------------------------------------------------------------
  63. //使用 Query String query
  64. //QueryString query一般用于全文搜索,但是也可以用于单个属性的搜索(设置DefaultField属性),queryString query可以不区分大小写。QueryString还有一个好处就是我们可以搜索一个term中的一部分,
  65. //例如lastname为"t Boterhuis 1",那么我们可以用"terhuis"搜索到这个数据(虽然需要在外面包上**),在term query里面就做不到,因为ES把每一个属性的值都分析成一个个单独的term,提高了搜索的效率。
  66. //keyword = "t Boterhuis 2";
  67. //QueryContainer wholeWordQuery = new QueryStringQuery() { Query = keyword, DefaultOperator = Operator.And };
  68. //var searchResults = client.Search<PersonDetail>(s => s
  69. //    .Index("elastic-search-app")
  70. //    .Query(wholeWordQuery)
  71. //);
  72. #endregion
  73. return searchResults.Documents.ToList();
  74. }
  75. public List<PersonDetail> Sort(string keyword)
  76. {
  77. // 首先我们把原先的索引先删除了
  78. var response =
  79. client.DeleteIndex(
  80. new DeleteIndexRequest(new IndexNameMarker()
  81. {
  82. Name = "elastic-search-app",
  83. Type = typeof(PersonDetail)
  84. }));
  85. //然后重新创建索引
  86. var indexResult = client.CreateIndex("PD-application");
  87. var response1 = client.Map<PersonDetail>(m => m.MapFromAttributes());
  88. IEnumerable<PersonDetail> persons = new List<PersonDetail>
  89. {
  90. new PersonDetail()
  91. {
  92. Id = 4,
  93. FirstName = "Boterhuis-040",
  94. LastName = "Gusto-040",
  95. },
  96. new PersonDetail()
  97. {
  98. Id = 5,
  99. FirstName = "sales@historichousehotels.com",
  100. LastName = "t Boterhuis 1",
  101. },
  102. new PersonDetail()
  103. {
  104. Id = 6,
  105. FirstName = "Aberdeen #110",
  106. LastName = "sales@historichousehotels.com",
  107. },
  108. new PersonDetail()
  109. {
  110. Id = 7,
  111. FirstName = "Aberdeen #110",
  112. LastName = "t Boterhuis 2",
  113. },
  114. };
  115. foreach (var person in persons)
  116. {
  117. client.Index(person);
  118. }
  119. var searchResults = client.Search<PersonDetail>(s => s
  120. .Index("PD-application")
  121. .Sort(sort => sort.OnField(f => f.Id).Order(SortOrder.Ascending))
  122. );
  123. return searchResults.Documents.ToList();
  124. }
  125. }
  1. public static class Util
  2. {
  3. //生成10000条sqlserver测试数据
  4. public static List<PersonDetail> Get10000PersonDetails()
  5. {
  6. var personDetailsList = new List<PersonDetail>();
  7. for (int i = 0; i < 10000; i++)
  8. {
  9. personDetailsList.Add(new PersonDetail()
  10. {
  11. FirstName = "FN" + new Random().Next(int.MaxValue),
  12. LastName = "LN"  + new Random().Next(int.MaxValue)
  13. });
  14. }
  15. return personDetailsList;
  16. }
  17. //生成10000条ElasticSearch测试数据
  18. public static List<PersonDetail> Get10000PersonDetailsWithID()
  19. {
  20. var personDetailsList = new List<PersonDetail>();
  21. for (int i = 0; i < 10000; i++)
  22. {
  23. personDetailsList.Add(new PersonDetail()
  24. {
  25. Id = i * new Random().Next(99),
  26. FirstName = "FN" + new Random().Next(int.MaxValue),
  27. LastName = "LN" + new Random().Next(int.MaxValue)
  28. });
  29. }
  30. return personDetailsList;
  31. }
  32. }
  1. public static class Setting
  2. {
  3. public static Uri Node
  4. {
  5. get
  6. {
  7. return new Uri("http://localhost:9200");
  8. }
  9. }
  10. //连接配置
  11. public static ConnectionSettings ConnectionSettings
  12. {
  13. get
  14. {
  15. return new ConnectionSettings(Node, defaultIndex: "es-index-app");
  16. }
  17. }
  18. }

Model层代码:

  1. public partial class PersonDetail
  2. {
  3. public long Id { get; set; }
  4. public string FirstName { get; set; }
  5. public string LastName { get; set; }
  6. }
  1. public partial class PersonContext : DbContext
  2. {
  3. static PersonContext()
  4. {
  5. Database.SetInitializer<PersonContext>(null);
  6. }
  7. public PersonContext()
  8. : base("Name=PersonContext")
  9. {
  10. }
  11. public DbSet<PersonDetail> PersonDetails { get; set; }
  12. protected override void OnModelCreating(DbModelBuilder modelBuilder)
  13. {
  14. //在重写OnModelCreating方法中则可以直接调用映射类,从而减少了OnModelCreating方法的复杂度,同时也增强了代码维护的可读性
  15. modelBuilder.Configurations.Add(new PersonDetailMap());  //属性映射约定
  16. }
  17. }
  1. //Fluent API配置Configuration映射类
  2. public class PersonDetailMap : EntityTypeConfiguration<PersonDetail>
  3. {
  4. public PersonDetailMap()
  5. {
  6. // 主键
  7. this.HasKey(t => new { t.Id, t.FirstName, t.LastName });
  8. // 属性
  9. this.Property(t => t.Id)
  10. .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
  11. this.Property(t => t.FirstName)
  12. .IsRequired();
  13. this.Property(t => t.LastName)
  14. .IsRequired();
  15. // 表 & 列 映射
  16. this.ToTable("PersonDetails");
  17. this.Property(t => t.Id).HasColumnName("Id");
  18. this.Property(t => t.FirstName).HasColumnName("FirstName");
  19. this.Property(t => t.LastName).HasColumnName("LastName");
  20. }
  21. }

sqlserver脚本:

  1. USE [Person]
  2. GO
  3. SET ANSI_NULLS ON
  4. GO
  5. SET QUOTED_IDENTIFIER ON
  6. GO
  7. CREATE TABLE [dbo].[PersonDetails](
  8. [Id] [bigint] IDENTITY(1,1) NOT NULL,
  9. [FirstName] [nvarchar](max) NOT NULL,
  10. [LastName] [nvarchar](max) NOT NULL
  11. ) ON [PRIMARY]
  12. GO

结果图:

Elasticsearch.Net使用(一)【入门篇】的更多相关文章

  1. 最新版本elasticsearch本地搭建入门篇

    最新版本elasticsearch本地搭建入门篇 项目介绍 最近工作用到elasticsearch,主要是用于网站搜索,和应用搜索. 工欲善其事,必先利其器. 自己开始关注elasticsearch, ...

  2. Elasticsearch学习记录(入门篇)

    Elasticsearch学习记录(入门篇) 1. Elasticsearch的请求与结果 请求结构 curl -X<VERB> '<PROTOCOL>://<HOST& ...

  3. 转载:elasticsearch入门篇

    转自:https://www.cnblogs.com/hello-shf/p/11543408.html elasticsearch入门篇   elasticsearch专栏:https://www. ...

  4. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

  5. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  6. 1. web前端开发分享-css,js入门篇

    关注前端这么多年,没有大的成就,就入门期间积累了不少技巧与心得,跟大家分享一下,不一定都适合每个人,毕竟人与人的教育背景与成长环境心理活动都有差别,但就别人的心得再结合自己的特点,然后探索适合自己的学 ...

  7. 一个App完成入门篇(七)- 完成发现页面

    第七章是入门篇的倒数第二篇文章了,明天整个APP将进入收官. 本节教程主要要教会大家使用二维码扫描和用do_WebView组件加在html页面. 导入项目 do_WebView组件 扫描功能 自定义事 ...

  8. [原创]Linq to xml增删改查Linq 入门篇:分分钟带你遨游Linq to xml的世界

    本文原始作者博客 http://www.cnblogs.com/toutou Linq 入门篇(一):分分钟带你遨游linq to xml的世界 本文原创来自博客园 请叫我头头哥的博客, 请尊重版权, ...

  9. 转:OSGi 入门篇:模块层

    OSGi 入门篇:模块层 1 什么是模块化 模块层是OSGi框架中最基础的一部分,其中Java的模块化特性在这一层得到了很好的实现.但是这种实现与Java本身现有的一些模块化特性又有明显的不同. 本文 ...

  10. 转:OSGi 入门篇:生命周期层

    OSGi 入门篇:生命周期层 前言 生命周期层在OSGi框架中属于模块层上面的一层,它的运作是建立在模块层的功能之上的.生命周期层一个主要的功能就是让你能够从外部管理应用或者建立能够自我管理的应用(或 ...

随机推荐

  1. gem安装出错了

    1.首先是SSL出错. SSL 证书错误 正常情况下,你是不会遇到 SSL 证书错误的,除非你的 Ruby 安装方式不正确. 如果遇到 SSL 证书问题,你又无法解决,请修改 ~/.gemrc 文件, ...

  2. Centos6.5建立本地YUM源

    很多情况下公司的服务器是不允许连外网的,那么安装软件的时候就很不方便了,这里就需要建立一个本地YUM源了. 文件位置:/etc/yum.repos.d/    后缀一定是.repo结束. 下面我们搭建 ...

  3. mac nginx compile

    编译 ./configure \ --prefix=/usr/local/services/nginx-1.14.0 \ --with-openssl=/Users/gavin/Downloads/s ...

  4. php 中 get_cfg_var() 与 ini_get() 的异同

    背景 get_cfg_var() 取的值是配置文件中的值 ini_get() Gets the value of a configuration option, 则取的当前值(运行时,PHP系统定义) ...

  5. Go cookie

    Web状态,对于我们从c/c++转过来的人来说还是很重视的啊 但,如何用好cookie来让我心顺畅,目前还是有点障碍 可能是我没能完全理解cookie 但是,如果由浏览器客户端决定自己绑定那个cook ...

  6. idc函数大全

    A80_addcA80_addcixA80_addciyA80_addixA80_addiyA80_cmpdA80_cmpiA80_im0A80_im1A80_im2A80_jrcA80_jrncA8 ...

  7. nodejs爬虫数据存入mysql

    node爬虫主要用的是三个插件 request cheerio mysql 废话不多说直接上代码 const request=require("request") const ch ...

  8. LocalStorage存储和cookie存储

    localStorage是H5的新特性,主要用来本地存储,一般浏览器支持的大小是5M,不同浏览器会有所不同,解决了cookie存储空间不足的问题. 2.使用:     ⑴.存 if(!window.l ...

  9. Bootstrap-常用图标glyphicon

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="utf-8& ...

  10. jQuery常用的取值或赋值的方法

    $(selector).data(name) 从被取元素返回附加的数据 存在一个div标签:<div data-meeting="hi Tom"></div> ...