真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網站制作重慶分公司

Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)-創(chuàng)新互聯(lián)

這篇文章主要介紹了Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng),具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

創(chuàng)新互聯(lián)是一家專注于做網站、成都網站制作與策劃設計,柘城網站建設哪家好?創(chuàng)新互聯(lián)做網站,專注于網站建設10多年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:柘城等地區(qū)。柘城做網站價格咨詢:18980820575

首先項目結構圖:

Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)

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; } 
 }
public class AppContext:DbContext 
 { 
 public AppContext() 
 { 
  
 } 
 public DbSet Books { get; set; } 
 }

ViewModels的相關:


public class SearchViewModel 
 { 
 public string Query { get; set; } 
 
 public IEnumerable> Results { get; set; } 
 
 public IDictionary Suggestions { get; set; } 
 
 public long Elapsed { get; set; } 
 
 }

接下來就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); 
 } 
 
 }
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); 
 
 
 
  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); 
  } 
  return Json("OK",JsonRequestBehavior.AllowGet); 
 } 
 
 protected override void Dispose(bool disposing) 
 { 
  if (disposing) 
  { 
  db.Dispose(); 
  } 
  base.Dispose(disposing); 
 } 
 }

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; 
  } 
 
 } 
 }

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"; } 
 } 
 }

SearchService.cs代碼:


public class SearchService 
 { 
 public double MinScore { get {return 0.0005; }} 
 
 //高亮標記前綴 
 public string PreHighlightTag 
 { 
  get { return @""; } 
 } 
 
 //高亮標記后綴 
 public string PostHighlightTag 
 { 
  get { return @""; } 
 } 
 
 
 public Tuple< IEnumerable>,long> Find(string query, int page = 0, int pageSize = 10) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search(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>, long>(result.Hits,result.ElapsedMilliseconds); 
 } 
 
 //查找短語建議 
 public IDictionary FindPhraseSuggestion(string phrase, int page = 0, int pageSize = 5) 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search(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> FindAll() 
 { 
  var result = Elasticsearch.Elasticsearch.Client.Search(s => s.AllIndices()); 
  return result.Hits; 
 } 
 
 }

Views視圖
Books文件夾下:
Index.cshtml:


@model IEnumerable 
 
@{ 
 ViewBag.Title = "Index"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 

Index

   

   @Html.ActionLink("創(chuàng)建新書", "Create") 

            @Html.DisplayNameFor(model => model.Title)          @Html.DisplayNameFor(model => model.Foreword)          @Html.DisplayNameFor(model => model.Pages)          @Html.DisplayNameFor(model => model.Author)             @foreach (var item in Model) {          @Html.DisplayFor(modelItem => item.Title)          @Html.DisplayFor(modelItem => item.Foreword)          @Html.DisplayFor(modelItem => item.Pages)          @Html.DisplayFor(modelItem => item.Author)          @Html.ActionLink("編輯", "Edit", new { id=item.Id }) |    @Html.ActionLink("詳細", "Details", new { id=item.Id }) |    @Html.ActionLink("刪除", "Delete", new { id=item.Id })        }   

Edit.cshtml:


@model Library.Web.Models.Book 
 
@{ 
 ViewBag.Title = "Edit"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 

Edit

      @using (Html.BeginForm())  {   @Html.AntiForgeryToken()        
Book
      @Html.ValidationSummary(true)   @Html.HiddenFor(model => model.Id)         @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Title)    @Html.ValidationMessageFor(model => model.Title)    
   
         @Html.LabelFor(model => model.Foreword, new { @class = "control-label col-md-2" })        @Html.TextAreaFor(model => model.Foreword)    @Html.ValidationMessageFor(model => model.Foreword)    
            @Html.LabelFor(model => model.Pages, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Pages)    @Html.ValidationMessageFor(model => model.Pages)                @Html.LabelFor(model => model.Author, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Author)    @Html.ValidationMessageFor(model => model.Author)                                }   
   @Html.ActionLink("返回列表", "Index") 
    @section Scripts {   @Scripts.Render("~/bundles/jqueryval")  }

Details.cshtml:


@model Library.Web.Models.Book 
 
@{ 
 ViewBag.Title = "Details"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 

Details

   
   
Book
         
    @Html.DisplayNameFor(model => model.Title)   
     
    @Html.DisplayFor(model => model.Title)   
     
    @Html.DisplayNameFor(model => model.Foreword)   
     
    @Html.DisplayFor(model => model.Foreword)   
     
    @Html.DisplayNameFor(model => model.Pages)   
     
    @Html.DisplayFor(model => model.Pages)   
     
    @Html.DisplayNameFor(model => model.Author)   
     
    @Html.DisplayFor(model => model.Author)   
      
 

   @Html.ActionLink("編輯", "Edit", new { id = Model.Id }) |   @Html.ActionLink("返回列表", "Index") 

Delete.cshtml:


@model Library.Web.Models.Book 
 
@{ 
 ViewBag.Title = "Delete"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 

Delete

   

Are you sure you want to delete this?

 
   
Book
         
    @Html.DisplayNameFor(model => model.Title)   
     
    @Html.DisplayFor(model => model.Title)   
     
    @Html.DisplayNameFor(model => model.Foreword)   
     
    @Html.DisplayFor(model => model.Foreword)   
     
    @Html.DisplayNameFor(model => model.Pages)   
     
    @Html.DisplayFor(model => model.Pages)   
     
    @Html.DisplayNameFor(model => model.Author)   
     
    @Html.DisplayFor(model => model.Author)   
          @using (Html.BeginForm()) {   @Html.AntiForgeryToken()          |    @Html.ActionLink("返回列表", "Index")   
   } 

Create.cshtml:


@model Library.Web.Models.Book 
 
@{ 
 ViewBag.Title = "Create"; 
 Layout = "~/Views/Shared/_Layout.cshtml"; 
} 
 

創(chuàng)建

      @using (Html.BeginForm())  {   @Html.AntiForgeryToken()        
Book
      @Html.ValidationSummary(true)         @Html.LabelFor(model => model.Title, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Title)    @Html.ValidationMessageFor(model => model.Title)                @Html.LabelFor(model => model.Foreword, new { @class = "control-label col-md-2" })        @Html.TextAreaFor(model => model.Foreword)    @Html.ValidationMessageFor(model => model.Foreword)                @Html.LabelFor(model => model.Pages, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Pages)    @Html.ValidationMessageFor(model => model.Pages)                @Html.LabelFor(model => model.Author, new { @class = "control-label col-md-2" })        @Html.EditorFor(model => model.Author)    @Html.ValidationMessageFor(model => model.Author)                                }   
   @Html.ActionLink("回到列表", "Index") 
    @section Scripts {   @Scripts.Render("~/bundles/jqueryval")  }

Home->Index.cshtml


@model Library.Web.ViewModels.SearchViewModel 
@{ 
 ViewBag.Title = "Elasticsearch"; 
} 
 
 
 

Elasticsearch入門

   安裝和配置群集

   
       
  1.     安裝Java   
  2.    
  3.     安裝Elasticsearch   
  4.    
  5. 運行Elasticsearch
  6.    
  7. 增加一些書籍
  8.    
        @if (Model == null)  {   return;  }     @if (Model.Suggestions.Any(x => x.Key == "did-you-mean"))   {   你的意思是:    foreach (var suggestions in Model.Suggestions["did-you-mean"])   {    var count = 0;    foreach (var suggestion in suggestions.Options)    {    @suggestion.Text ?    count++;    }    if (count == 0)    {    沒有建議!    }     }   }     

Results for: @Model.Query

    @if (Model != null)  {          文檔的分數(排名相關度)TitleContentAuthor            @foreach (var result in Model.Results)    {         @result.Score                @if (result.Highlights != null && result.Highlights.Any(x => x.Key == "title"))      {      var hl = result.Highlights.FirstOrDefault(x => x.Key == "title");      foreach (var h in hl.Value.Highlights)      {       WriteLiteral(h);      }      }      else      {      WriteLiteral(result.Source.Title);      }                      @if (result.Highlights != null && result.Highlights.Any(x => x.Key == "foreword"))     {      var hl = result.Highlights.FirstOrDefault(x => x.Key == "foreword");      foreach (var h in hl.Value.Highlights)      {      WriteLiteral(h + "...");      }     }              @result.Source.Author          }    @if (!Model.Results.Any())    {         沒有結果發(fā)現:(        }           
@Model.Results.Count()搜索結果用了 @Model.Elapsed 毫秒
  }

_Layout.cshtml


 
 
 
  
  
 @ViewBag.Title 
 @Styles.Render("~/Content/css") 
 @Scripts.Render("~/bundles/modernizr") 
 
 
 
  
  
   
   
    
    
    
   
  @Html.ActionLink("Elasticsearch MVC示例", "Index", "Home", null, new { @class = "navbar-brand" }) 
   
   
   
   
  • @Html.ActionLink("Home", "Index", "Home")
  •      
  • @Html.ActionLink("Books", "Index", "Books")
  •             @using (Html.BeginForm("Search", "Home", FormMethod.Get,new {@class = "navbar-form navbar-left"}))    {                    提交    }                        @RenderBody()      
        

    © @DateTime.Now.Year - Elasticsearch, Nest, ASP.NET 應用

       
            @Scripts.Render("~/bundles/jquery")   @Scripts.Render("~/bundles/bootstrap")   @RenderSection("scripts", required: false)   

    結果如圖:

    Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)


    列表頁

    Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)


    創(chuàng)建頁:

    Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)


    搜索結果頁:

    Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)


    感謝你能夠認真閱讀完這篇文章,希望小編分享的“Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)”這篇文章對大家有幫助,同時也希望大家多多支持創(chuàng)新互聯(lián)網站建設公司,,關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關知識等著你來學習!


    標題名稱:Elasticsearch.Net如何實現MVC4圖書管理系統(tǒng)-創(chuàng)新互聯(lián)
    本文路徑:http://weahome.cn/article/jjsoe.html

    在線咨詢

    微信咨詢

    電話咨詢

    028-86922220(工作日)

    18980820575(7×24)

    提交需求

    返回頂部