HomeController.cs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using Masuit.LuceneEFCore.SearchEngine;
  2. using Masuit.LuceneEFCore.SearchEngine.Interfaces;
  3. using Microsoft.AspNetCore.Mvc;
  4. using System.Collections.Generic;
  5. using WebSearchDemo.Database;
  6. namespace WebSearchDemo.Controllers
  7. {
  8. [Route("[controller]/[action]")]
  9. public class HomeController : Controller
  10. {
  11. private readonly ISearchEngine<DataContext> _searchEngine;
  12. public HomeController(ISearchEngine<DataContext> searchEngine)
  13. {
  14. _searchEngine = searchEngine;
  15. }
  16. /// <summary>
  17. /// 搜索
  18. /// </summary>
  19. /// <param name="s">关键词</param>
  20. /// <param name="page">第几页</param>
  21. /// <param name="size">页大小</param>
  22. /// <returns></returns>
  23. [HttpGet]
  24. public IActionResult Index(string s, int page, int size)
  25. {
  26. var result = _searchEngine.ScoredSearch<Post>(new SearchOptions(s, page, size, typeof(Post)));
  27. return Ok(result);
  28. }
  29. /// <summary>
  30. /// 创建索引
  31. /// </summary>
  32. [HttpGet]
  33. public void CreateIndex()
  34. {
  35. //_searchEngine.CreateIndex();//扫描所有数据表,创建符合条件的库的索引
  36. _searchEngine.CreateIndex(new List<string>() { nameof(Post) });//创建指定的数据表的索引
  37. }
  38. /// <summary>
  39. /// 添加索引
  40. /// </summary>
  41. [HttpPost]
  42. public void AddIndex(Post p)
  43. {
  44. // 添加到数据库并更新索引
  45. _searchEngine.Context.Post.Add(p);
  46. _searchEngine.SaveChanges();
  47. //_luceneIndexer.Add(p); //单纯的只添加索引库
  48. }
  49. /// <summary>
  50. /// 删除索引
  51. /// </summary>
  52. [HttpDelete]
  53. public void DeleteIndex(Post post)
  54. {
  55. //从数据库删除并更新索引库
  56. Post p = _searchEngine.Context.Post.Find(post.Id);
  57. _searchEngine.Context.Post.Remove(p);
  58. _searchEngine.SaveChanges();
  59. //_luceneIndexer.Delete(p);// 单纯的从索引库移除
  60. }
  61. /// <summary>
  62. /// 更新索引库
  63. /// </summary>
  64. /// <param name="post"></param>
  65. [HttpPatch]
  66. public void UpdateIndex(Post post)
  67. {
  68. //从数据库更新并同步索引库
  69. Post p = _searchEngine.Context.Post.Find(post.Id);
  70. // update...
  71. _searchEngine.Context.Post.Update(p);
  72. _searchEngine.SaveChanges();
  73. //_luceneIndexer.Update(p);// 单纯的更新索引库
  74. }
  75. }
  76. }