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. 使用github(一)

    一.使用Github(目的.基本概念) 1.目的 借助github托管项目代码 2.基本概念 (1)仓库(Repository) 仓库即项目的意思,你想在github上开源一个项目,那就必须要新建一个 ...

  2. mybatis之注解式开发之关联查询

    package com.bjsxt.mapper; import org.apache.ibatis.annotations.Select; import com.bjsxt.pojo.Clazz; ...

  3. 46.HTML---18个学习 flexbox 的优质资源

    大家都在谈论的“flexbox”是什么呢?它能帮我们解决什么问题呢?现在你可以在你的项目中使用“flexbox”吗?这些指南.教程.网站和工具会告诉你你需要知道的关于“flexbox”的知识. Lea ...

  4. WebSocket.之.基础入门-后端响应消息

    WebSocket.之.基础入门-后端响应消息 在<WebSocket.之.基础入门-前端发送消息>的代码基础之上,进行添加代码.代码只改动了:TestSocket.java 和 inde ...

  5. 关于hdfs 和hive的数据迁移

    1. 迁移hdfs,使用hadoop 命令 hadoop distcp -pugp  hdfs://localhost:9000/ hdfs://localhost:9000/ 此处示例仅作说明用 2 ...

  6. callback源码分析——callbacks

    uvm的callback必须是提供者有预见性的留一些方法在function前后,这样在使用的时候,进行遍历调度即可 设计者,需要从uvm_callback定义一个基类,只定义function原型,定义 ...

  7. [10]Windows内核情景分析---中断处理

    中断处理 每个cpu有一张中断表,简称IDT. IDT的整体布局:[异常->空白->5系->硬](推荐采用7字口诀的方式重点记忆) 异常:前20个表项存放着各个异常的描述符(IDT表 ...

  8. mysql主从配置,读写分离

    Mysql主从配置,实现读写分离 大型网站为了软解大量的并发访问,除了在网站实现分布式负载均衡,远远不够.到了数据业务层.数据访问层,如果还是传统的数据结构,或者只是单单靠一台服务器扛,如此多的数据库 ...

  9. jQuery选择器--selector1,selector2,selectorN和ancestor descendant

        selector1,selector2,selectorN 概述 将每一个选择器匹配到的元素合并后一起返回.你可以指定任意多个选择器,并将匹配到的元素合并到一个结果内 参数 selector1 ...

  10. sql 表中删除字段重复的行

    Id    Email    UserName1    Taiseer.Joudeh@hotmail.com    TaiseerJoudeh2    Hasan.Ahmad@mymail.com   ...