ElasticSearch(站内搜索)
简介
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", );
} /// <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中文分词查询的处理
ElasticSearch(站内搜索)的更多相关文章
- ElasticSearch(站内搜索) 转发 https://www.cnblogs.com/xibei666/p/5929970.html
简介 Elasticsearch是一个实时的分布式搜索和分析引擎.它可以帮助你用前所未有的速度去处理大规模数据.它可以用于全文搜索,结构化搜索以及分析,当然你也可以将这三者进行组合.Elasticse ...
- es简单打造站内搜索
最近挺忙的,在外出差,又同时干两个项目.白天一个晚上一个,特别是白天做的项目,马上就要上线了,在客户这里 三天两头开会,问题很多真的很想好好静下来怼代码,半夜做梦都能fix bugs~ 和客户交流真的 ...
- es站内站内搜索笔记(一)
es站内站内搜索笔记(一) 第一节: 概述 使用elasticsearch进行网站搜索,es是当下最流行的分布式的搜索引擎及大数据分析的中间件,搜房网的主要功能:强大的搜索框,与百度地图相结合,实现地 ...
- 站内搜索(ELK)之数据目录
在使用elasticsearch建设站内搜索时,随着数据不断丰富,为了数据管理更加精细化,必须建立并实时维护“数据目录”(在程序设计中对应的叫法“数据字典”). 数据目录需要包含以下几个维度:数据名称 ...
- 站内搜索(ELK)之开篇
因工作需要,近期使用ELK搭建单位内部“站内搜索”,目前已将内部OA系统20余个流程的表单.附件的数据索引到elasticsearch中,包括打印复印流程.声像采集流程.远程文件发送.规章制度.内线电 ...
- 一步步开发自己的博客 .NET版(5、Lucenne.Net 和 必应站内搜索)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
- 利用Solr服务建立的站内搜索雏形---solr1
最近看完nutch后总感觉像好好捯饬下solr,上次看到老大给我展现了下站内搜索我便久久不能忘怀.总觉着之前搭建的nutch配上solr还是有点呆板,在nutch爬取的时候就建立索引到solr服务下, ...
- Lucene.net站内搜索—6、站内搜索第二版
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
- Lucene.net站内搜索—5、搜索引擎第一版实现
目录 Lucene.net站内搜索—1.SEO优化 Lucene.net站内搜索—2.Lucene.Net简介和分词Lucene.net站内搜索—3.最简单搜索引擎代码Lucene.net站内搜索—4 ...
随机推荐
- php环境的搭建
Windows下php作为Apache的子模块加载 1.安装Apache后,找到httpd.conf文件,加入下列三行 #将php作为Apache的一个模块来处理LoadModule php5_mod ...
- Vue.js之v-if
---恢复内容开始--- 首先,在跟着api做的时候,要把v-if包裹在Vue对应的el里面,重要的事情说三遍. html: <div id="vif"> <di ...
- easyUi load方法重新加载表单的数据
1.表单回显数据的方法 <script> //方法一 function loadLocal(){ $('#ff').form('load',{ name:'myname', email:' ...
- Angular.js通过bootstrap实现经典的表单提交
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <link rel= ...
- 【转载】Arcengine效率探究之二——属性的更新
文转载自hymyjl2010<Arcengine效率探究之二——属性的更新> 修改一批要素的属性有多种方法,当数据量较大时,若选择不当可能会大大影响速度. 一.IRowBuffer 方 ...
- Java排序算法——基数排序
- php中session锁--如何防止阻塞请求(译)
现代浏览器限制到一个host并发连接的数量一般为4或6.这意味着,如果您的web页面加载几十个来自同一个host的assert file(js.图像.css)时,由于并发数的限制,会产生排队.同样甚至 ...
- 精选9个值得学习的 HTML5 效果【附源码】
这里精选了一组很酷的 HTML5 效果.HTML5 是现 Web 开发领域的热点, 拥有很多让人期待已久的新特性,特别是在移动端,Web 开发人员可以借助 HTML5 强大功能轻松制作各种交互性强.效 ...
- PHP如何自动识别第三方Restful API的内容,自动渲染成 json、xml、html、serialize、csv、php等数据
如题,PHP如何自动识别第三方Restful API的内容,自动渲染成 json.xml.html.serialize.csv.php等数据? 其实这也不难,因为Rest API也是基于http协议的 ...
- Linux 新建用户、用户组,给用户分配权限(chown、useradd、groupadd、userdel、usermod、passwd、groupdel)
Linux 系统是一个多用户多任务的分时操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统.用户的账号一方面可以帮助系统管理员对使用系统的用户进行 ...