• 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中文分词查询的处理

  • 相关阅读:
    SQL Server 全文搜索 配置、查询初体验
    SQL Server 触发器
    SQL Server 锁
    SQL Server 事务语法
    SQL Server 表变量和临时表的区别
    SQL Server系统存储过程
    SQL 语句转换格式函数Cast、Convert
    SQL Server 系统视图
    T-SQL 批处理
    SQL Server 分区表
  • 原文地址:https://www.cnblogs.com/xibei666/p/5929970.html
Copyright © 2020-2023  润新知