宝哥软件园

弹性搜索 网使用教程MVC4图书管理系统(2)

编辑:宝哥软件园 来源:互联网 时间:2021-09-12

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

首先项目结构图:

模型层的相关代码如下:图书。铯代码如下:

公共类Book { [Key] [DatabaseGenerated(数据库生成选项身份])公共Guid Id { get设置;}[最大长度(500)][显示(名称='标题)]公共字符串标题{ get设置;}[最大长度(5000)][显示(名称='前言)]公共字符串前言{ get设置;}[显示(名称='总页数)]public int Pages { get;设置;}[显示(名称='作者)]公共字符串作者{ get设置;} }公共类app context : db context { public AppContext()} { public DbSetBook Books { get;设置;} }视图模型的相关:

公共类SearchViewModel {公共字符串查询{ get设置;} public ienumerablehitbook Results { get;设置;}公共IDictionarystring,Supply[]建议{获取设置;}公共长已用时间{获取设置;} } 接下来就HomeController.cs和BooksController.cs的代码:

公共类家庭控制器:控制器{私有search service _ search servicepublic HomeController(){ _ search service=new search service();}公共操作结果索引(){ return View();}公共行动结果搜索(字符串查询,int page=0,int page size=10){ var result=_ Search service .查找(查询、页面、页面大小);定义变量建议=_搜索服务.find短语建议(查询,0,3);var视图模型=新搜索视图模型{查询=查询,结果=结果.项目1,经过时间=结果。第2项,建议=建议};返回视图("索引",视图模型);} }公共类book Controller : Controller { private AppContext db=new AppContext();公共操作结果索引(){ 0返回视图(分贝).书籍。to list());}公共行动结果详细信息(Guid?id){ if(id==null){ 0返回新的Httpstatuscoderesult(Httpstatuscode .错误的请求);} Book book=db .书籍。查找(id);if(book==null){ return HttpNotFound();}返回视图(书籍);}公共操作结果创建(){返回视图();}[httpset][validateantoforytoken]公共操作结果创建([绑定(包括='标识、标题、外部、页面、作者')]图书){ if (ModelState .IsValid) { book .Id=Guid .NewGuid();db .书籍。添加(书籍);db .saveChanges();//添加书弹性搜索弹性搜索。客户。索引本(书);返回RedirectToAction(' Index ');}返回视图(书籍);}公共操作结果编辑(Guid?id){ if(id==null){ 0返回新的Httpstatuscoderesult(Httpstatuscode .错误的请求);} Book book=db .书籍。查找(id);if(book==null){ return HttpNotFound();}返回视图(书籍);}[httpset][validateantoforytoken]公共操作结果编辑([绑定(包括='标识,标题,外部,页面,作者')]图书){ if(ModelState .IsValid) { db .条目(书)。状态=实体状态。已修改;db .saveChanges();返回RedirectToAction(' Index ');}返回视图(书籍);}公共操作结果删除(Guid?id){ if(id==null){ 0返回新的Httpstatuscoderesult(Httpstatuscode .错误的请求);} Book book=db .书籍。查找(id);if(book==null){ return HttpNotFound();}返回视图(书籍);}[httpset,操作名称(' Delete ')][validateantiforytoken]公共操作结果Delete confirmed(Guid id){ Book Book=db .书籍。查找(id);db .书籍。移除(书籍);db .saveChanges();返回RedirectToAction(' Index ');} public JsonResult Reindex(){ foreach(var book in db .书籍){//索引书籍弹性搜索弹性搜索。客户。索引本(书);}返回Json('OK ',JsonRequestBehavior .允许get);}受保护的覆盖无效处置(布尔处理){ if(处理){ db .dispose();}基地。处置。} }弹性搜索辅助类:首先是Elasticsearch.cs

公共类弹性搜索{私有静态弹性客户端公共静态弹性客户端{ get { if (_client==null) { //连接配置var setting=new connection settings(弹性搜索配置.连接,弹性耳机配置. DefaultIndex);_客户端=新弹性客户端(设置);} return _ client} } }弹性搜索配置。铯类

公共静态类ElasticsearchConfiguration {公共静态字符串主机{ get { return ' http://localhost} }公共静态长端口{ get { return 9200} }公共静态Uri连接{ get { return new Uri(字符串。格式(' {0}:{1} ',主机,端口));} }公共静态字符串DefaultIndex { get { return ' library ';} } } SearchService.cs代码:

公共类搜索服务{ public double MinScore { get { return 0.0005;}} //高亮标记前缀公共字符串PreHighlightTag { get { return @ ' strong ';} } //高亮标记后缀公共字符串poshighlight tag { get { return @ '/strong };} } public Tuple ienumerablehitbook,long Find(字符串查询,int page=0,int page size=10){ var result=弹性搜索.弹性搜索。客户。搜索书籍(页数=页数(页数*页面大小)).大小(页面大小)。卫生部.高亮显示(h=h .PreTags(PreHighlightTag)).后置标签(f=f.OnField(b=b。前言),f=f.OnField(b=b。标题))。查询(q=q.QueryString(qs=qs .查询(查询)。usedsmax())));返回新的TupleIEnumerableIHitBook,long(结果。命中,结果elapsedmirisseconds秒);} //查找短语建议public IDictionarystring,Supply[]findFlushinge(字符串短语,int page=0,int page size=5){ var result=弹性搜索.弹性搜索。客户。搜索书籍(页数=页数(页数*页面大小)).大小(页面大小)。建议措辞('你的意思是,ps=ps .文本(短语)。现场(f=f。前言))。query(q=q . matchell());返回结果。建议;} public ienumerablehitbook find all(){ var result=elastic search .弹性搜索。客户。搜索图书(s=s . all inodis());返回结果。点击量;} }视图视图书文件夹下:Index.cshtml:

@model IEnumerableLibrary .网络。模特。预订@ { ViewBag .标题="索引";布局=' ~/视图/共享/_布局。“cshtml”;} h2Index/h2 p @Html .ActionLink('创建新书,' Create ')/p table class=' table ' tr th @ Html .显示名称(型号=型号.title)/th @ Html .显示名称(型号=型号.前言)th @ Html .显示名称(型号=型号.pages)/th @ Html .显示名称(型号=型号.作者)/th/th/tr @ foreach(模型中的定义变量项目){ tr td @Html .显示(模型项目=项目.标题)/td td @Html .显示(模型项目=项目.前言)/td td @Html .显示(模型项目=项目.Pages) /td td @Html .显示(模型项目=项目.作者)/td td @Html .ActionLink('编辑,'编辑,新{ id=item .Id }) | @Html .ActionLink('详细、"详细信息",新的{ id=item .Id }) | @Html .ActionLink('删除、"删除",新{ id=item .id })/TD/tr }/表格编辑。cshtml :

@模型库网络。模特。预订@ { ViewBag .标题='编辑;布局=' ~/视图/共享/_布局。“cshtml”;} H2 EdIt/H2 @使用(Html .begin inform()){ @ Html .antiforgrytoken()div=' form-horizontal ' H4图书/H4 HR/@ Html .ValidationSummary(true) @Html .HiddenFor(model=model .Id) div class='form-group' @Html .标签(型号=型号.Title,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.标题)@Html .ValidationMessageFor(model=model .title)/div/div class=' form-group ' @ Html .标签(型号=型号.前言,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .textarefor(model=model .前言)@Html .ValidationMessageFor(model=model .前言)/div/div class=' form-group ' @ Html .标签(型号=型号.页面,新的{ @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.Pages) @Html .ValidationMessageFor(model=model .pages)/div/div class=' form-group ' @ Html .标签(型号=型号.作者,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.作者)@Html .ValidationMessageFor(model=model .作者)/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='提交'值=' Save ' class=' BTN BTN-默认'/div/div/div } div @ Html .ActionLink('返回列表,' Index ')/div @ section Scripts { @ Scripts .render(' ~/bundles/jqueryval ')}详细信息。cshtml :

@模型库网络。模特。预订@ { ViewBag .标题="详细信息";布局=' ~/视图/共享/_布局。“cshtml”;} H2详情/H2区H4图书/H4人力资源/dl class=' dl-horizontal ' dt @ Html .显示名称(型号=型号.Title) /dt dd @Html .显示(模型=模型.标题)/dd dt @Html .显示名称(型号=型号.前言)/dt dd @Html .显示(模型=模型.前言)/dd dt @Html .显示名称(型号=型号.Pages) /dt dd @Html .显示(模型=模型.Pages) /dd dt @Html .显示名称(型号=型号.作者)/dt dd @Html .显示(模型=模型.作者)/dd /dl /div p @Html .ActionLink('编辑,'编辑,新{ id=Model .Id }) | @Html .ActionLink('返回列表,' Index') /p Delete.cshtml:

@模型库网络。模特。预订@ { ViewBag .标题='删除;布局=' ~/视图/共享/_布局。“cshtml”;} H2删除/H2 H3您确定要删除此吗?/H3 div H4图书/H4 HR/dl class=' dl-horizontal ' dt @ Html .显示名称(型号=型号.Title) /dt dd @Html .显示(模型=模型.标题)/dd dt @Html .显示名称(型号=型号.前言)/dt dd @Html .显示(模型=模型.前言)/dd dt @Html .显示名称(型号=型号.Pages) /dt dd @Html .显示(模型=模型.Pages) /dd dt @Html .显示名称(型号=型号.作者)/dt dd @Html .显示(模型=模型.作者)/DD/dl @使用(Html .begin inform()){ @ Html .antiforgretoken()div class=' form-actions no-color '输入类型='提交'值=' Delete ' class=' BTN BTN-默认'/| @ Html .ActionLink('返回列表,' Index') /div } /div Create.cshtml:

@模型库网络。模特。预订@ { ViewBag .标题="创建";布局=' ~/视图/共享/_布局。“cshtml”;} h2创建/H2/使用(Html .begin inform()){ @ Html .antiforgrytoken()div=' form-horizontal ' H4图书/H4 HR/@ Html .ValidationSummary(true)div class=' form-group ' @ Html .标签(型号=型号.Title,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.标题)@Html .ValidationMessageFor(model=model .title)/div/div class=' form-group ' @ Html .标签(型号=型号.前言,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .textarefor(model=model .前言)@Html .ValidationMessageFor(model=model .前言)/div/div class=' form-group ' @ Html .标签(型号=型号.页面,新的{ @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.Pages) @Html .ValidationMessageFor(model=model .pages)/div/div class=' form-group ' @ Html .标签(型号=型号.作者,new { @ class=' control-label col-MD-2 ' })div class=' col-MD-10 ' @ Html .编辑(模型=模型.作者)@Html .ValidationMessageFor(model=model .作者)/div/div class=' form-group ' div class=' col-MD-offset-2 col-MD-10 '输入类型='submit '值='创建=' BTNBTN-默认'/div/div/div } div @ Html .ActionLink('回到列表,' Index ')/div @ section Scripts { @ Scripts .render(' ~/bundles/jqueryval ')} Home-index。cshtml

@模型库网络。查看模型。搜索viewmodel @ { viewpag .title=' elastic search } div class=' jumbo tron弹性搜索入门/h1 p class='lead '安装和配置群集/p ol阿利安装Java/a /li阿利安装弹性搜索/a /li li运行弹性搜索/li lia href='/Books/Create '增加一些书籍/a/Li/ol/div @ if(Model==null){ return;} div style=' margin-top : 30px;'@if(车型.建议。任何(x=x.Key=='你是说){ span你的意思是: /span foreach(模型中的风险值建议。建议['你的意思是]){ var count=0;foreach(建议中的定义变量建议。选项){ a href='/Home/Search?[电子邮件保护]“强”建议文本/strong /a计数;} if(count==0){ span class=' alert-danger '没有建议!/span } } }/div H3 strong :/strong @ Model的结果。查询/h3 @if(车型!=null){ table class=' table table-condented '和trth文档的分数(排名相关度)/thththtitle/thththcontent/ththAuthor/th/tr/the和tbody @foreach(模型中的定义变量结果。结果)。Id' @if(结果。亮点!=空结果。突出显示。任何(x=x . Key==' title '){ var HL=结果.高光。first or default(x=x . Key==' title ');在house of lords 上院中的var h .价值。高光){写文字(h);} } else { WriteLiteral(结果。来源。标题);} /a /td td @if(结果。亮点!=空结果。突出显示。任何(x=x.Key=='前言){ var hl=结果.高光。FirstOrDefault(x=x.Key=='前言');在house of lords 上院中的var h .价值。高光){写文字(h ' . ');} }/TD td@result.Source.Author/td/tr } @ if(!模特。结果。any()){ tr TD colspan=' 4 ' class=' alert alert-danger ' style=' text-align : center;'没有结果发现:(/TD/tr }/t车身/桌子H4 span class='标签标签-默认' @ Model .结果。计数()/跨度搜索结果用了@模型。消逝毫秒/h4 } _Layout.cshtml

!DOCTYPE html html head meta charset=' utf-8 '/meta name=' viewport ' content=' width=device-width,initial-scale=1.0 ' title@ViewBag.Title/title @ style .呈现(' ~/Content/CSS ')@脚本render(' ~/bundle/modernizr ')/head body div class=' nav bar nav bar-reverse nav bar-fixed-top ' div class=' container ' div class=' nav bar-header ' button type=' button ' class=' nav bar-toggle ' data-toggle=' collapse ' data-target=' .导航栏-折叠图标栏/图标栏/按钮@ Html .ActionLink('Elasticsearch MVC示例,' Index ',' Home ',null,new { @ class=' nav bar-brand ' })/div class=' nav bar-折叠折叠' ul class=' nav bar-nav ' Li @ Html .ActionLink('Home ',' Index ',' Home')/li li@Html .ActionLink('Books ',' Index ',' Books ')/Li/ul @使用(Html .开始通知('搜索','主页,表单方法获取,新的{ @ class='导航栏-表单导航栏-左侧' }){ div class='表单-组'输入类='表单-控件'类型='文本'占位符='搜索name=' query '/div按钮类型='submit' class='btn btn-default '提交/button }/div/div/class=' container body-content ' @ render body()/HR/footer p @ DateTime .现在。年-弹性研究,巢,ASP。网应用/p/页脚/div @脚本.渲染(' ~/bundle/jquery ')@脚本.render(' ~/bundle/bootstrap ')@ render部分(' scripts ',required d : false)/body/html结果如图:

列表页

创建页:

搜索结果页:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+