`

社区帖子全文搜索实战(基于ElasticSearch)

 
阅读更多

 

 

要为社区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的分布式全文搜索系统.pdf

    标题《基于ElasticSearch的分布式全文搜索系统》的文件是一篇关于构建和实现基于ElasticSearch技术的分布式全文搜索引擎的研究。从文件描述来看,这篇文章的目的是为了提高海量及复杂数据的访问效率,在对Elastic...

    基于ElasticSearch的搜房网实战1

    通过以上步骤,你就可以部署并运行这个基于ElasticSearch的搜房网实战项目,实现高效、便捷的房产信息搜索和地图找房功能。注意,实际操作时还需要根据具体需求和环境调整相关设置,以保证服务的稳定性和安全性。

    基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip

    基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目源码.zip...

    elasticsearch实战

    Elasticsearch是一个基于Lucene的搜索引擎,它提供了全文搜索功能。它的核心特性是弹性可伸缩,可以将数据分布到多个节点上,实现高可用和负载均衡。在实际应用中,Elasticsearch可以用于日志数据分析、全文搜索、...

    基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目.zip

    基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索引擎ElasticSearch的电影搜索系统项目 基于SSM架构结合全文搜索...

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战)

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存下来可以多看看。好记性不如烂笔头哦~,ElasticSearch,简称es,es是一个...

    Elasticsearch技术解析与实战+Elasticsearch权威指南

    Elasticsearch是一款强大的开源搜索引擎,基于Lucene库构建,广泛应用于大数据分析、日志收集、实时搜索等领域。本文将深入解析Elasticsearch的核心概念、架构原理,并结合实战案例,帮助你全面掌握这一技术。 首先...

    基于ElasticSearch的搜索系统的设计与实现

    【基于ElasticSearch的搜索系统的设计与实现】 随着移动互联网时代的到来,网络信息量呈现爆炸式增长,这对信息检索服务提出了更高的要求。传统的搜索引擎在处理大数据量时往往面临搜索效率低下和匹配度单一的问题...

    分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene).rar

    分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (ElasticSearch、ELK、搜索引擎、Lucene),本教程旨在带领大家进入搜索引擎领域,从无到有,深入浅出的讲解了什么是搜索引擎,搜索引擎的...

    ElasticSearch实战 in Action.zip

    ElasticSearch实战 in Action(原著原版)压缩包,ElasticSearch文档,ES全文检索从入门到精通,高清PDF,是学习es和精通es必备手册,能快速达到精通ElasticSearch,一册在手,ElasticSearch无忧,开发、学习、调优...

    Elasticsearch实战与原理解析 源代码.zip

    Elasticsearch是一个开源的全文搜索引擎,它以分布式、RESTful接口和实时性为特点,广泛应用于数据搜索、分析和监控。这份"**Elasticsearch实战与原理解析 源代码**"的压缩包文件提供了关于这个强大工具的实践案例和...

    1_elasticsearch技术解析与实战

    Elasticsearch是一款开源、分布式、实时的全文搜索和分析引擎,基于Lucene构建,广泛应用于日志分析、实时监控、数据搜索等多个领域。其核心特性包括强大的全文检索能力、分布式架构、自动分词、高可扩展性和实时性...

    《ElasticSearch入门到实战》电子书,从入门到进阶实战项目的教程文档,框架SpringBoot框架整合ES.zip

    Elasticsearch 是一个基于 Lucene 的开源全文搜索引擎,以其分布式、可扩展性、实时搜索以及强大的数据分析能力而受到广泛欢迎。它不仅支持文本搜索,还可以处理结构化和非结构化数据,适用于日志分析、监控、信息...

    imooc BAT大牛亲授 基于ElasticSearch的搜房网实战

    BAT大牛亲授 基于ElasticSearch的搜房网实战 当前互联网行业,数据检索、数据分析等大数据相关的产品异常火爆,而ElasticSearch是当下最火的分布式搜索引擎及大数据分析中间件 ,了解并掌握ElasticSearch的实用场景...

    ElasticSearch实战教程

    同时,我们还将学习ElasticSearch的实战应用,如使用ElasticSearch实现搜索引擎,使用ElasticSearch实现数据分析等。 全文检索是指:通过一个程序扫描文本中的每一个单词,针对单词建立索引,并保存该单词在文本中...

    Elasticsearch技术解析与实战_高清 带索引书签目录_朱林(著)

    Elasticsearch(简称ES)是一款基于Lucene的分布式、RESTful搜索和分析引擎,广泛应用于大数据处理、日志分析、实时搜索等领域。这本书针对不同层次的读者,提供了深入浅出的技术解析和实战指导。 **1. Elastic...

    基于Java8的SSM+Elasticsearch全文检索的个人博客系统.zip

    在构建一个基于Java8的SSM(Spring、SpringMVC、MyBatis)+Elasticsearch的个人博客系统中,我们需要掌握多个核心技术点。这里,我们将深入探讨如何整合这些技术来实现一个高效的全文检索功能。 首先,让我们了解...

    基于elasticsearch 6.x的新闻搜索项目代码

    Elasticsearch是一款开源的全文搜索引擎,基于Lucene构建,具有分布式、实时、高可扩展性等特性。在6.x版本中,它提供了更强大的搜索和分析能力,支持复杂的查询语法,如布尔运算、短语匹配、模糊搜索等。同时,...

    基于Elastic Search的电影垂直搜索引擎服务端技术研究1

    【基于Elastic Search的电影垂直搜索引擎服务端技术研究】 电影垂直搜索引擎是一种针对电影领域的特定信息检索工具,旨在解决通用搜索引擎在电影信息搜索上的不足,如信息量过大、查询精度低和深度不足等问题。该文...

Global site tag (gtag.js) - Google Analytics