要为社区APP的帖子提供全文搜索的功能,考察使用ElasticSearch实现此功能。
ES的安装不再描述。
- es集成中文分词器(根据es版本选择对应的插件版本)
下载源码:https://github.com/medcl/elasticsearch-analysis-ik
maven编译得到:elasticsearch-analysis-ik-1.9.5.zip
在plugins目录下创建ik目录,将elasticsearch-analysis-ik-1.9.5.zip解压在此目录。
- 创建索引(settings,mapping)
配置
{ "settings":{ "number_of_shards":5, "number_of_replicas":1 }, "mappings":{ "post":{ "dynamic":"strict", "properties":{ "id":{"type":"integer","store":"yes"}, "title":{"type":"string","store":"yes","index":"analyzed","analyzer": "ik_max_word","search_analyzer": "ik_max_word"}, "content":{"type":"string","store":"yes","index":"analyzed","analyzer": "ik_max_word","search_analyzer": "ik_max_word"}, "author":{"type":"string","store":"yes","index":"no"}, "time":{"type":"date","store":"yes","index":"no"} } } } }
执行命令,创建索引
curl -XPOST 'spark2:9200/community' -d @post.json
- 插入数据
工程代码依赖的jar包
pom.xml
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.7</version>
</dependency>
ES client工具类
public class EsClient { private static TransportClient transportClient; static { Settings settings = Settings.builder().put("cluster.name", "es_cluster").build(); try { transportClient = new TransportClient.Builder().settings(settings) .build() .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("spark2"), 9300)) .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("spark3"), 9300)); } catch (UnknownHostException e) { throw new RuntimeException(e); } } public static TransportClient getInstance() { return transportClient; } }
插入数据
TransportClient client = EsClient.getInstance(); for (int i = 0; i < 10000; i++) { Post post = new Post(i + "", "hll", "百度百科", "ES即etamsports ,全名上海英模特制衣有限公司,是法国Etam集团在中国的分支企业,创立于1994年底。ES的服装适合出游、朋友聚会、晚间娱乐、校园生活等各种轻松", new Date()); client.prepareIndex("community", "post", post.getId()) .setSource(JSON.toJSONString(post)) .execute() .actionGet(); }
- 查询,高亮
TransportClient client = EsClient.getInstance(); SearchResponse response = client.prepareSearch("community") .setTypes("post") .setSearchType(SearchType.DFS_QUERY_THEN_FETCH) .setQuery(QueryBuilders.multiMatchQuery("上海", "title", "content")) .setFrom(0).setSize(10) .addHighlightedField("content") .setHighlighterPreTags("<red>") .setHighlighterPostTags("</red>") .execute() .actionGet(); SearchHits hits = response.getHits(); for (SearchHit hit : hits) { String s = ""; System.out.println(hit.getHighlightFields()); for (Text text : hit.highlightFields().get("content").getFragments()) { s += text.string(); } Map<String, Object> source = hit.getSource(); source.put("content", s); System.out.println(source); }
查询结果
{author=hll, id=782, time=1490165237878, title=百度百科, content=ES即etamsports ,全名<red>上海</red>英模特制衣有限公司,是法国Etam集团在中国的分支企业,创立于1994年底。ES的服装适合出游、朋友聚会、晚间娱乐、校园生活等各种轻松}
相关推荐
基于ElasticSearch的搜房网实战一、核心技术1.ElasticSearch+MySQL+Kafka实现站内搜索引擎2.ElasticSearch+百度
基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip...
基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索...
(狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...
分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...
ElasticSearch实战 in Action(原著原版)压缩包,ElasticSearch文档,ES全文检索从入门到精通,高清PDF,是学习es和精通es必备手册,能快速达到精通ElasticSearch,一册在手,ElasticSearch无忧,开发、学习、调优...
Elasticsearch技术解析与实战+Elasticsearch权威指南两本电子书,合集共享,让你早日学习了解Elasticsearch
BAT大牛亲授 基于ElasticSearch的搜房网实战 当前互联网行业,数据检索、数据分析等大数据相关的产品异常火爆,而ElasticSearch是当下最火的分布式搜索引擎及大数据分析中间件 ,了解并掌握ElasticSearch的实用场景...
#资源达人分享计划#
Elasticsearch 是一个开源的高度可扩展的全文搜索和分析引擎,拥有查询近实时的超强性能。 大名鼎鼎的Lucene 搜索引擎被广泛用于搜索领域,但是操作复杂繁琐,总是让开发者敬而远之。而 Elasticsearch将 Lucene 作为...
1_elasticsearch技术解析与实战1_elasticsearch技术解析与实战1_elasticsearch技术解析与实战
基于ElasticSearch的搜索系统的设计与实现,房辉,蒋砚军,本文旨在解决大数据量下的信息检索服务搜索效率低和匹配度单一的问题,设计和实现了一种面向中文数据库的综合搜索系统。该系统以
全文搜索引擎ElasticSearch介绍与使用
基于ElasticSearch的Communism全文搜索引擎 依赖环境 Python 3.7(建议直接使用 Anaconda ) ElasticSearch 7.5.0 (核心依赖组件) MySQL 8.0 (目前不是强制需要) 安装方式 下载项目源码到本地,并进入根目录 ...
searchEngine 是基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等功能。 该项目集成了 Spring Boot、ElasticSearch、RestHighLevelClient、Vue.js、Element-ui、Log4j 和 Fastjson ...
Elasticsearch实战与原理解析 源代码
elasticsearch 6.x 实战教程 ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTfulweb接口。ElasticSearch是用Java开发的,并作为Apache许可条款下的开放源码发布...
Elastic Search技术与实战Elastic Search技术与实战Elastic Search技术与实战