`
lbyzx123
  • 浏览: 476242 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

elasticsearch基本使用

 
阅读更多
1、maven引用
        <dependency>
            <groupId>org.elasticsearch.client</groupId>
            <artifactId>elasticsearch-rest-high-level-client</artifactId>
            <version>7.2.0</version>
        </dependency>

        <dependency>
            <groupId>org.elasticsearch</groupId>
            <artifactId>elasticsearch</artifactId>
            <version>7.2.0</version>
        </dependency>

2、ElasticsearchConfig.java

@Configuration
public class ElasticsearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestHighLevelClient restHighLevelClient = new RestHighLevelClient(RestClient.builder(new HttpHost("127.0.01", 9200, "http")));
        return restHighLevelClient;
    }
}

3、ContentService.java

@Service("contentService")
public class ContentService {

    @Autowired
    private RestHighLevelClient restHighLevelClient;

    public boolean parseContent(String keywords) throws Exception {
        List<Goods> contents = HtmlParserUtils.parseJD(keywords);

        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("2m");

        for (int i = 0; i < contents.size(); i++) {
            bulkRequest.add(new IndexRequest("jd_goods").source(JSON.toJSONString(contents.get(i)), XContentType.JSON));
        }

        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        return bulk.hasFailures();
    }

    public List<Map<String, Object>> searchPage(String keywords, int pageNo, int pageSize) throws Exception {
        if (pageNo <=1) {
            pageNo = 1;
        }
        SearchRequest searchRequest = new SearchRequest("jd_goods");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 分页
        sourceBuilder.from(pageNo);
        sourceBuilder.size(pageSize);
        // 精准匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keywords);
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        // 执行搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        // 解析结果
        List<Map<String, Object>> list = new ArrayList<>();
        for(SearchHit documentFields : searchResponse.getHits().getHits()) {
            list.add(documentFields.getSourceAsMap());
        }
        return list;
    }

    /**
     * 搜索高亮
     * @param keywords
     * @param pageNo
     * @param pageSize
     * @return
     * @throws Exception
     */
    public List<Map<String, Object>> searchPageHighlight(String keywords, int pageNo, int pageSize) throws Exception {
        if (pageNo <=1) {
            pageNo = 1;
        }
        SearchRequest searchRequest = new SearchRequest("jd_goods");
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
        // 分页
        sourceBuilder.from(pageNo);
        sourceBuilder.size(pageSize);
        // 精准匹配
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("title", keywords);
        sourceBuilder.query(termQueryBuilder);
        sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));

        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder.field("title");
        // 多个高亮显示
        highlightBuilder.requireFieldMatch(false);
        highlightBuilder.preTags("<span style='color:red'>");
        highlightBuilder.postTags("</span>");
        sourceBuilder.highlighter(highlightBuilder);

        // 执行搜索
        searchRequest.source(sourceBuilder);
        SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        // 解析结果
        List<Map<String, Object>> list = new ArrayList<>();
        for(SearchHit hit : searchResponse.getHits().getHits()) {
            // 解析高亮的字段
            Map<String, HighlightField> highlightFields = hit.getHighlightFields();
            HighlightField title = highlightFields.get("title");
            Map<String, Object> sourceMap = hit.getSourceAsMap();
            if (title != null) {
                Text[] fragments = title.fragments();
                String n_title = "";
                for (Text text : fragments) {
                    n_title = n_title + text;
                }
                // 高亮字段替换原来的内容即可
                sourceMap.put("title", n_title);
            }
            list.add(sourceMap);
        }
        return list;
    }

}

 

分享到:
评论

相关推荐

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

    (狂神)ElasticSearch快速入门笔记,ElasticSearch基本操作以及爬虫(Java-ES仿京东实战),包含了小狂神讲的东西,特别适合新手学习,笔记保存...es基本是开箱即用(解压就可以用!),非常简单。Solr安装略微复杂一点!

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

    分享一套完整版视频课程——分布式搜索引擎Elasticsearch开发实战基础篇 (Elastic...Elasticsearch基本使用和简单查询 Elasticsearch的Java客户端使用 Elasticsearch索引和Mapping Elasticsearch搜索深入 Elastic

    Elastic Search搭建使用教程.pdf(内含ElasticSearch教程权威指南)

    Elasticsearch的基本概念包括Node、Cluster、Index和Document。Node是Elasticsearch中的单个实例,可以单独运行,也可以在集群中作为数据节点或协调节点。Cluster是由多个Node组成的,每个Cluster都有一个唯一的集群...

    elasticSearch(ES)最新版 ik分词插件7.10 elasticsearch-analysis-ik-7.10.0

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene构建,提供了分布式、RESTful风格的搜索和分析引擎服务。在中文环境下,为了实现精确的分词和搜索,我们需要安装适合版本的分词插件,如“elastic...

    elasticsearch服务器安装包

    在安装Elasticsearch之前,我们需要了解一些基本概念和步骤: 1. **Java运行环境**:Elasticsearch是用Java编写的,因此,安装前必须确保系统上已安装了JDK,并且版本至少为8。可以通过`java -version`命令检查Java...

    Elasticsearch_python使用文档

    以上就是 Elasticsearch Python 客户端的基本使用方法,包括创建 Index、插入、查询和删除数据,以及一些高级查询操作。实际使用中,你还可以根据需求探索更多的搜索、过滤和聚合功能。记住,错误处理是关键,可以...

    elasticsearch-head 可视化界面

    5. **浏览器扩展**:虽然Elasticsearch-Head可以作为一个独立的服务运行,但题目提到的是在谷歌浏览器中作为扩展使用。这需要将解压后的文件上传至Chrome浏览器的扩展管理页面,然后启用该扩展。 ### 功能特性 1. ...

    最新版本springboot集成elasticsearch

    一般来说我们开发Elasticsearch会选择使用集成springboot,在网上找的springboot集成elasticsearch文章几乎都是extends ElasticsearchRepository的方式来实现。但是新版本ElasticsearchRepository里的方法基本上已经...

    elasticsearch7.14.0.zip

    Elasticsearch 7.14.0 是一个高度可扩展的全文搜索引擎,广泛应用于日志分析、实时数据分析...以上内容涵盖了Elasticsearch 7.14.0的基本使用和扩展功能,但具体操作和配置细节需参考官方文档,结合实际需求进行调整。

    ElasticSearch-head插件

    而Elasticsearch-head插件由于更新较慢,可能无法支持最新版本的Elasticsearch,因此在实际使用中需要考虑兼容性问题。 总的来说,Elasticsearch-head插件是一个轻量级且实用的Elasticsearch可视化工具,尤其适合...

    ElasticSearch官方测试数据

    Elasticsearch(ES)是一种流行的开源全文搜索引擎,它基于Lucene库构建,被广泛用于大数据分析、日志聚合、实时搜索和索引等场景。官方提供的测试数据集是检验Elasticsearch功能、性能和稳定性的关键资源,可以帮助...

    基于.netcore搜索封装ElasticSearch.zip

    在.NET Core开发中,Elasticsearch已经成为一种广泛使用的全文搜索引擎,它提供了高度可扩展性和实时分析功能。这个名为"基于.netcore搜索封装ElasticSearch.zip"的压缩包,显然包含了一个针对.NET Core平台的...

    ElasticSearch Java API 中文文档

    标签《ES Java API 中文文档》强调了文档的内容属性,它属于ElasticSearch的一个重要组成部分,即用Java语言进行数据交互和操作的应用程序接口部分。 从部分内容中可以提取出以下知识点: 1. **Transport Client**...

    elasticsearch未授权访问 漏洞修复

    首先,我们需要在一个 Elasticsearch 节点上生成证书,使用 `elasticsearch-certutil ca` 创建 CA 证书,然后使用 `elasticsearch-certutil cert` 生成服务器证书。确保证书具有适当的权限,并将其复制到集群中的...

    Elasticsearch 开发手册

    在数据抽取 ELT 领域,ES 全家桶 ELK(Elasticsearch+Logstash+Kibana)赫赫有名。 Elasticsearch 基本概念: * 倒排索引:Elasticsearch 为什么快,核心设计理念就是采用了倒排索引机制。倒排索引的方式是,根据 ...

    ElasticSearch客户端工具

    在众多的ElasticSearch客户端工具中,"ElasticHD-1.4"可能是一款专为Elasticsearch设计的可视化界面工具,其版本号为1.4,暗示着它可能具备一些基本的功能,如集群健康检查、节点信息查看、索引管理等。虽然具体的...

    JAVA实现ElasticSearch的简单实例

    Java实现Elasticsearch的简单实例主要涉及以下几个关键...以上就是基于Java实现Elasticsearch的基本步骤和涉及的主要知识点。在实际开发中,还需要考虑性能优化、安全性、集群管理等多个方面,以构建高效稳定的ES应用。

    ES同义词插件 elasticsearch-analysis-dynamic-synonym-6.5.1.rar

    在IT领域,尤其是在搜索引擎优化和大数据分析中,Elasticsearch(ES)是一个广泛使用的开源全文检索引擎。它基于Lucene库,提供了分布式、实时、高可用性以及容错能力的数据存储和搜索解决方案。本篇文章将重点讲解...

    elasticsearch7.17.11版本分词器插件安装包

    以上就是Elasticsearch 7.17.11版本安装及使用IK分词器的基本步骤。为了优化性能和满足特定需求,你还可以通过配置词典、同义词库等方式进一步定制分词规则。记住,合理的分词策略对于提高搜索准确性和用户体验具有...

Global site tag (gtag.js) - Google Analytics