ElasticSearch(站內搜索)


簡介

  Elasticsearch是一個實時的分布式搜索和分析引擎。它可以幫助你用前所未有的速度去處理大規模數據。它可以用於全文搜索,結構化搜索以及分析,當然你也可以將這三者進行組合。Elasticsearch是一個建立在全文搜索引擎 Apache Lucene 基礎上的搜索引擎,可以說Lucene是當今最先進,最高效的全功能開源搜索引擎框架。但是Lucene只是一個框架,要充分利用它的功能,需要使用JAVA,並且在程序中集成Lucene。需要很多的學習了解,才能明白它是如何運行的,Lucene確實非常復雜。
  Elasticsearch使用Lucene作為內部引擎,但是在使用它做全文搜索時,只需要使用統一開發好的API即可,而不需要了解其背后復雜的Lucene的運行原理。當然Elasticsearch並不僅僅是Lucene這么簡單,它不但包括了全文搜索功能,還可以進行以下工作:

  • 分布式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索。
  • 實時分析的分布式搜索引擎。
  • 可以擴展到上百台服務器,處理PB級別的結構化或非結構化數據。

安裝:Window安裝(轉載)

  1. 下載Elasticsearch,地址:elasticsearch.org/download 
  2. 下載jdk,百度搜索jdk下載即可
  3. 配置JAVA_HOME變量,配置方法在此文:http://jingyan.baidu.com/article/9113f81b0ceae22b3214c7e1.html
  4. 解壓elasticsearch,打開cmd命令窗口,定位到bin目錄,然后執行elasticsearch.bat 即可。
  5. 最后在瀏覽器中打開:http://localhost:9200/?pretty 效果如下:
  6. 插件head安裝方法
  7. 首先下載head.zip 地址:https://github.com/mobz/elasticsearch-head
  8. 然后在elasticsearch安裝目錄下的plugins文件夾下建立head文件夾
  9. 將下載后的head文件copy到head文件夾下
  10. 運行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中文分詞查詢的處理

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM