• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > Elasticsearch.Net使用教程 MVC4图书管理系统(2)

Elasticsearch.Net使用教程 MVC4图书管理系统(2)

作者:天风隼 字体:[增加 减小] 来源:互联网 时间:2017-05-11

天风隼通过本文主要向大家介绍了elasticsearch,elasticsearch教程,elasticsearch官网,elasticsearch安装,elasticsearch java等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文实例为大家分享了MVC4图书管理系统的制作教程,供大家参考,具体内容如下

首先项目结构图:

Model层的相关代码如下:
Book.cs代码如下:

public class Book 
 { 
 [Key] 
 [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
 public Guid Id { get; set; } 
 
 [MaxLength(500)] 
 
 [Display(Name = "标题")] 
 public string Title { get; set; } 
 
 [MaxLength(5000)] 
 [Display(Name = "前言")] 
 public string Foreword { get; set; } 
 
 [Display(Name = "总页数")] 
 public int Pages { get; set; } 
 
 [Display(Name = "作者")] 
 public string Author { get; set; } 
 } 
</div>
public class AppContext:DbContext 
 { 
 public AppContext() 
 { 
  
 } 
 public DbSet<Book> Books { get; set; } 
 } 
</div>

ViewModels的相关:

public class SearchViewModel 
 { 
 public string Query { get; set; } 
 
 public IEnumerable<IHit<Book>> Results { get; set; } 
 
 public IDictionary<string, Suggest[]> Suggestions { get; set; } 
 
 public long Elapsed { get; set; } 
 
 } 
</div>

接下来就HomeController.cs和BooksController.cs的代码:

public class HomeController : Controller 
 { 
 private SearchService _searchService; 
 public HomeController() 
 { 
  _searchService = new SearchService(); 
 } 
 public ActionResult Index() 
 { 
 
  return View(); 
 } 
 
 public ActionResult Search(string query, int page = 0, int pageSize = 10) 
 { 
 
  var result = _searchService.Find(query, page, pageSize); 
  var suggestion = _searchService.FindPhraseSuggestion(query, 0, 3); 
 
  var viewModel = new SearchViewModel { Query = query, Results = result.Item1,Elapsed = result.Item2, Suggestions = suggestion }; 
 
 
  return View("Index", viewModel); 
 } 
 
 } 
</div>
public class BooksController : Controller 
 { 
 private AppContext db = new AppContext(); 
 
 public ActionResult Index() 
 { 
  return View(db.Books.ToList()); 
 } 
 
 public ActionResult Details(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
 
 public ActionResult Create() 
 { 
  return View(); 
 } 
 
  
 [HttpPost] 
 [ValidateAntiForgeryToken] 
 public ActionResult Create([Bind(Include="Id,Title,Foreword,Pages,Author")] Book book) 
 { 
  if (ModelState.IsValid) 
  { 
  book.Id = Guid.NewGuid(); 
  db.Books.Add(book); 
  db.SaveChanges(); 
 
  //添加书 
  Elasticsearch.Elasticsearch.Client.Index<Book>(book); 
 
 
 
  return RedirectToAction("Index"); 
  } 
 
  return View(book); 
 } 
 
 public ActionResult Edit(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
 
 
 [HttpPost] 
 [ValidateAntiForgeryToken] 
 public ActionResult Edit([Bind(Include="Id,Title,Foreword,Pages,Author")] Book book) 
 { 
  if (ModelState.IsValid) 
  { 
  db.Entry(book).State = EntityState.Modified; 
  db.SaveChanges(); 
  return RedirectToAction("Index"); 
  } 
  return View(book); 
 } 
 
 public ActionResult Delete(Guid? id) 
 { 
  if (id == null) 
  { 
  return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
  } 
  Book book = db.Books.Find(id); 
  if (book == null) 
  { 
  return HttpNotFound(); 
  } 
  return View(book); 
 } 
 
 [HttpPost, ActionName("Delete")] 
 [ValidateAntiForgeryToken] 
 public ActionResult DeleteConfirmed(Guid id) 
 { 
  Book book = db.Books.Find(id); 
  db.Books.Remove(book); 
  db.SaveChanges(); 
  return RedirectToAction("Index"); 
 } 
 
 public JsonResult Reindex() 
 { 
  foreach (var book in db.Books) 
  { 
  //Indexing book 
  Elasticsearch.Elasticsearch.Client.Index<Book>(book); 
  } 
  return Json("OK",JsonRequestBehavior.AllowGet); 
 } 
 
 protected override void Dispose(bool disposing) 
 { 
  if (disposing) 
  { 
  db.Dispose(); 
  } 
  base.Dispose(disposing); 
 } 
 } 
</div>

Elasticsearch辅助类:
首先是Elasticsearch.cs

public class Elasticsearch 
 { 
 private static ElasticClient _client; 
 public static ElasticClient Client 
 { 
  get 
  { 
  if (_client == null) 
  { 
   //连接配置 
   var setting = new ConnectionSettings(ElasticsearchConfiguration.Connection,ElasticsearchConfiguration.DefaultIndex); 
   _client = new ElasticClient(setting); 
  } 
  return _client; 
  } 
 
 } 
 } 
</div>

ElasticsearchConfiguration.cs类

public static class ElasticsearchConfiguration 
 { 
 public static string Host { get { return "http://localhost"; } } 
 
 public static long Port { get { return 9200; } } 
 
 public static Uri Connection 
 { 
  get { return new Uri(string.Format("{0}:{1}", Host, Port)); } 
 } 
 
 public static string DefaultIndex 
 { 
  get { return "library"; } 
 } 
 } 
</div>

SearchService.cs代码:

public class SearchService 
 { 
 public double MinScore { get {return 0.0005; }} 
 
 //高亮标记前缀 
 public string PreHighlightTag 
 { 
  get { return @"<strong>"; } 
 } 
 
 //高亮标记后缀 
 public string PostHighlightTag 
 { 
  get { return @"</strong>"; } 
 } 
 
 
 public Tuple< IEnumerable<IHit<Book>>,long> Find(string query, int page = 0, int pageSize = 10) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s 
  .From(page * pageSize) 
  .Size(pageSize) 
  .MinScore(MinScore) 
  .Highlight(h => h 
   .PreTags(PreHighlightTag) 
   .PostTags(PostHighlightTag) 
   .OnFields( 
   f => f.OnField(b => b.Foreword), 
   f => f.OnField(b => b.Title) 
   )) 
  .Query(q => q.QueryString(qs => qs.Query(query).UseDisMax()))); 
 
  return new Tuple<IEnumerable<IHit<Book>>, long>(result.Hits,result.ElapsedMilliseconds); 
 } 
 
 //查找短语建议 
 public IDictionary<string, Suggest[]> FindPhraseSuggestion(string phrase, int page = 0, int pageSize = 5) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s 
  .From(page*pageSize) 
  .Size(pageSize) 
  .SuggestPhrase("did-you-mean", ps => ps 
   .Text(phrase) 
   .OnField(f => f.Foreword)) 
  .Query(q => q.MatchAll())); 
  
  return result.Suggest; 
 } 
 
 
 public IEnumerable<IHit<Book>> FindAll() 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search<Book>(s => s.AllIndices()); 
  return result.Hits; 
 } 
 
 } 
</div>

Views视图
Books文件夹下:
Index.cshtml:

@model IEnumerable<Library.Web.Models.Book> 
 
@{ 
 ViewBag.Title = "Index"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 
<h2>Index</h2> 
 
<p> 
 @Html.ActionLink("创建新书", "Create") 
</p> 
<table class="table"> 
 <tr> 
 <th> 
  @Html.DisplayNameFor



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Elasticsearch.Net使用教程 MVC4图书管理系统(2)
  • Elasticsearch.Net使用入门教程(1)

相关文章

  • 2017-05-11DataSet 添加数据集、行、列、主键和外键等操作示例
  • 2017-05-11如何取得Repeater控件选择的项目及注意事项
  • 2017-05-11ASP.NET Mvc开发之查询数据
  • 2017-05-11asp.net 未能加载文件或程序集“XXX”或它的某一个依赖项。试图加载格式不正确的程序。
  • 2018-08-20.net中自定义错误页面的实现方法
  • 2017-05-11asp.net sql存储过程
  • 2017-05-11asp.net 无限分类第1/3页
  • 2017-05-11使用DataTable.Select 方法时,特殊字符的转义方法分享
  • 2017-05-11asp.net中使用cookie传递参数的方法
  • 2017-05-11灵活掌握Asp.net MVC中GridView的使用方法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 利用ASP.NET MVC+EasyUI+SqlServer搭建企业开发框架
    • asp.net access添加返回自递增id的实现方法第1/3页
    • ASP.NET中MVC传递数据的几种形式总结
    • ASP.NET笔记之Session、http、web开发原则、xss漏洞的详细介绍
    • ASP.NET Core Web App应用第三方Bootstrap模板的方法教程
    • ASP.NET中为TextBox中添加calendar.js示例代码
    • Asp.net中static变量和viewstate的使用方法(谨慎)
    • asp.net web.config加密解密方法
    • ASP.NET(C#) 读取EXCEL另加解决日期问题的方法分享
    • 巧用ASP.NET Cookie

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有