簡介
Elasticsearch是一個實時的分布式搜索和分析引擎。它可以幫助你用前所未有的速度去處理大規模數據。它可以用於全文搜索,結構化搜索以及分析,當然你也可以將這三者進行組合。Elasticsearch是一個建立在全文搜索引擎 Apache Lucene 基礎上的搜索引擎,可以說Lucene是當今最先進,最高效的全功能開源搜索引擎框架。但是Lucene只是一個框架,要充分利用它的功能,需要使用JAVA,並且在程序中集成Lucene。需要很多的學習了解,才能明白它是如何運行的,Lucene確實非常復雜。
Elasticsearch使用Lucene作為內部引擎,但是在使用它做全文搜索時,只需要使用統一開發好的API即可,而不需要了解其背后復雜的Lucene的運行原理。當然Elasticsearch並不僅僅是Lucene這么簡單,它不但包括了全文搜索功能,還可以進行以下工作:
- 分布式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索。
- 實時分析的分布式搜索引擎。
- 可以擴展到上百台服務器,處理PB級別的結構化或非結構化數據。
安裝:Window安裝(轉載)
- 下載Elasticsearch,地址:elasticsearch.org/download
- 下載jdk,百度搜索jdk下載即可
- 配置JAVA_HOME變量,配置方法在此文:http://jingyan.baidu.com/article/9113f81b0ceae22b3214c7e1.html
- 解壓elasticsearch,打開cmd命令窗口,定位到bin目錄,然后執行elasticsearch.bat 即可。
- 最后在瀏覽器中打開:http://localhost:9200/?pretty 效果如下:
- 插件head安裝方法
- 首先下載head.zip 地址:https://github.com/mobz/elasticsearch-head
- 然后在elasticsearch安裝目錄下的plugins文件夾下建立head文件夾
- 將下載后的head文件copy到head文件夾下
- 運行es,在瀏覽器中打開:http://localhost:9200/_plugin/head/ 出現這個界面就可以。
使用:
1、Nuget下載安裝 plainelastic.net 第三方類庫;
2、編寫ElasticSearchHelper類:
using PlainElastic.Net; using PlainElastic.Net.Queries; using PlainElastic.Net.Serialization; using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace BookMgr { public class ElasticSearchHelper { public static readonly ElasticSearchHelper Intance = new ElasticSearchHelper(); private ElasticConnection Client; private ElasticSearchHelper() { Client = new ElasticConnection("192.168.1.8", 9200); } /// <summary> /// 數據索引 /// </summary> /// <param name="indexName">索引名稱</param> /// <param name="indexType">索引類型</param> /// <param name="id">索引文檔id,不能重復,如果重復則覆蓋原先的</param> /// <param name="jsonDocument">要索引的文檔,json格式</param> /// <returns>索引結果</returns> public IndexResult Index(string indexName, string indexType, string id, string jsonDocument) { var serializer = new JsonNetSerializer(); string cmd = new IndexCommand(indexName, indexType, id); OperationResult result = Client.Put(cmd, jsonDocument); var indexResult = serializer.ToIndexResult(result.Result); return indexResult; } /// <summary> /// 數據索引 /// </summary> /// <param name="indexName">索引名稱</param> /// <param name="indexType">索引類型</param> /// <param name="id">索引文檔id,不能重復,如果重復則覆蓋原先的</param> /// <param name="jsonDocument">要索引的文檔,object格式</param> /// <returns>索引結果</returns> public IndexResult Index(string indexName, string indexType, string id, object document) { var serializer = new JsonNetSerializer(); var jsonDocument = serializer.Serialize(document); return Index(indexName, indexType, id, jsonDocument); } /// <summary> /// 全文檢索 /// </summary> /// <typeparam name="T">搜索類型</typeparam> /// <param name="indexName">索引名稱</param> /// <param name="indexType">索引類型</param> /// <param name="query">查詢條件(單個字段或者多字段或關系)</param> /// <param name="from">當前頁(0為第一頁)</param> /// <param name="size">頁大小</param> /// <returns>搜索結果</returns> public SearchResult<T> Search<T>(string indexName, string indexType, QueryBuilder<T> query, int from, int size) { var queryString = query.From(from).Size(size).Build(); var cmd = new SearchCommand(indexName, indexType); var result = Client.Post(cmd, queryString); var serializer = new JsonNetSerializer(); return serializer.ToSearchResult<T>(result); } } }
3、MVC中調用ElasticSearchHelper類:
[HttpPost] public ActionResult BMsg(Book DataModel) { DataModel.BookWriteTime = DateTime.Now; DBBookMgr.BooksOpeart(DataModel, OpeartOption.NEW); var result = ElasticSearchHelper.Intance.Index("db_book", "searchbook", DataModel.Id.ToString(), DataModel); return View(DataModel); }
看下效果圖:使用框架(MVC5+Dapper+ElasticSearch)
4、參考博客:
ElasticSearch的安裝:http://www.cnblogs.com/panzi/p/5659697.html
ElasticSearch系列學習: http://www.cnblogs.com/eggTwo/p/4039779.html
ElasticSearch使用:http://blog.csdn.net/wulex/article/details/52144145
5、未完待續內容:
ElasticSearch中文分詞查詢的處理