要为社区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的服装适合出游、朋友聚会、晚间娱乐、校园生活等各种轻松}
相关推荐
5. **搜索功能**:支持关键字搜索,快速定位到相关信息,这可能涉及到了全文检索技术,如Lucene或Elasticsearch。 6. **数据统计**:收集并分析用户行为,生成各种统计数据,为决策提供依据。 7. **数据库设计**:...
为了方便用户查找信息,系统可能集成了全文搜索引擎如Elasticsearch,实现高效精准的搜索功能。 七、缓存技术 为提高性能,论坛系统可能会使用Redis或Memcached等缓存技术,存储热点数据,减少数据库压力。 八、...
Java中可以使用Lucene或者Elasticsearch进行全文搜索。 5. 用户互动:社区论坛的互动性体现在用户之间的交流,如好友系统、私信功能、通知提醒等。这些功能需要设计复杂的业务逻辑,并确保数据一致性。 6. 前端...
本案例基于EasySNS V1.6版本进行研究,EasySNS是一款开源社交软件系统,提供丰富的功能以支持社区交流。在进行漏洞分析之前,我们需要准备好相应的环境: 1. **官方网站**: [http://www.imzaker.com]...
晋城市-晋城市-街道行政区划_140500_Shp数据-wgs84坐标系.rar
内容概要:本文档汇总了46个经典的Linux面试题及其答案,涵盖了Linux系统操作的基本命令和概念。内容涉及路径表示与目录切换、进程管理、文件和目录操作、权限设置、文件内容查看等多个方面。每个问题都给出了明确的答案,旨在帮助面试者全面掌握Linux命令行操作技能,同时加深对Linux系统原理的理解。 适合人群:准备Linux相关职位面试的求职者,尤其是有一定Linux基础但缺乏实战经验的技术人员。 使用场景及目标:①用于个人自学或面试前复习,巩固Linux基础知识;②作为企业内部培训资料,帮助员工提升Linux操作水平;③为初学者提供系统化的学习指南,快速入门Linux命令行操作。 其他说明:文档内容侧重于实际操作命令的讲解,对于每个命令不仅提供了基本语法,还解释了具体应用场景,有助于读者更好地理解和记忆。建议读者在学习过程中多加练习,将理论知识转化为实际操作能力。
街道级行政区划shp数据,wgs84坐标系,直接下载使用。
内容概要:本文提供了10道华中杯C++竞赛真题的详细解析,涵盖多种基础编程技能与高级特性。每道题目不仅包含详细的解题思路和代码实现,还附带了完整的运行结果。具体包括:函数参数传递(指针实现)、宏定义比较、数组元素打印、几何图形面积计算、字符串拼接、素数判断、多态的实现、文件操作、简单计算器和学生信息管理。这些题目帮助读者深入理解C++语言的核心概念和技术应用。 适合人群:对C++有一定了解的编程初学者和中级开发者,尤其是准备参加编程竞赛的学生或程序员。 使用场景及目标:①作为编程练习和竞赛备考资料,帮助读者掌握C++的基本语法和常用算法;②通过实际代码示例加深对C++特性的理解,如指针、宏定义、面向对象编程等;③提供完整的源码供读者参考和调试,增强动手能力和问题解决能力。 阅读建议:建议读者按照题目难度逐步学习,先理解题目背景和解题思路,再仔细研读代码实现,并尝试独立编写和调试代码。同时,鼓励读者扩展思考,探索更多可能的解决方案,以提高编程水平。
街道级行政区划shp数据,wgs84坐标系,直接使用。
街道级行政区划shp数据,wgs84坐标系,直接使用。
通用计算器的设计FPGA.doc
晋城市-沁水县-街道行政区划_140521_Shp数据-wgs84坐标系.rar
赤峰市-松山区-街道行政区划_150404_Shp数据-wgs84坐标系.rar
JAVA中Stream编程常见的方法分类
街道级行政区划shp数据,wgs84坐标系,直接使用。
大同市-浑源县-街道行政区划_140225_Shp数据-wgs84坐标系.rar
包头市-昆都仑区-街道行政区划_150203_Shp数据-wgs84坐标系.rar
街道级行政区划shp矢量数据,wgs84坐标系,下载直接使用
街道级行政区划shp数据,wgs84坐标系,直接下载使用。