ElasticSearch的搜索关键字高亮

22 篇文章 5 订阅
订阅专栏
13 篇文章 5 订阅
订阅专栏
5 篇文章 0 订阅
订阅专栏

一:需求:搜索一本书的题目,搜索关键字高亮加粗显示,(根据title中的文字进行全文搜索,展示出结果来,统计搜索时间了,返回记录数).

     1. 使用技术如下        

            SpringBoot 2.0.5 RELEASE ,ElasticSearch  6.4.1,Bootstrap,Thymeleaf 3.0.9 RELEASE, Maven 3.3.9,lombok,IDEA热部署.  ES的测试数据.搭建了一主两备简单集群.集群名:elasticsearch.

     application.yml

server:
  port: 8082

     2. Maven依赖如下

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.5.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<properties>
		<!-- set thymeleaf version SpringBoot默认使用的是Thymeleaf的2.0的版本.-->
		<thymeleaf.version>3.0.9.RELEASE</thymeleaf.version>
		<thymeleaf-layout-dialect.version>2.1.1</thymeleaf-layout-dialect.version>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>
	<dependencies>
        <!-- 引入ElasticSearch-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
		</dependency>
        <dependency>
            <groupId>org.elasticsearch.plugin</groupId>
            <artifactId>transport-netty3-client</artifactId>
            <version>5.6.10</version>
        </dependency>
		<!-- SpringBoot的Web-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
        <!-- Thymeleaf-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		<!--添加lombok -->
		<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<version>1.16.18</version>
		</dependency>
		<!-- 热部署-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>
		<!-- SpringBoot的test-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

       3. 配置ElasticSearch(这里使用Java注解的配置方式)

          ElasticSearchConfig配置如下.

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.InetSocketTransportAddress;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.InetAddress;

@Configuration
public class ElasticSearchConfig {
    private static final Logger logger = LoggerFactory.getLogger(ElasticSearchConfig.class);
    /** ES的配置信息*/
    private static final String CLUSTER_NAME="elasticsearch";
    private static final String HOST_NAME="localhost";
    private static final Integer PORT=9300;

    /** 返回TransportClient*/
   @Bean
    public TransportClient client() {
           logger.info("初始化开始中...");
           TransportClient client = null;
           try {
               TransportAddress transportAddress = new InetSocketTransportAddress(InetAddress.getByName(HOST_NAME),PORT);
               // 配置信息
               Settings esSetting = Settings.builder()
                       .put("cluster.name", CLUSTER_NAME)
                       .build();
               // 配置信息Settings自定义
               client= new PreBuiltTransportClient(esSetting);
               client.addTransportAddresses(transportAddress);
           } catch (Exception e) {
               logger.error("elasticsearch TransportClient create error!!!", e);
           }
           return client;
   }
}

4. Novel实体类

import lombok.Getter;
import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.elasticsearch.annotations.Document;
import java.util.Date;

@Document(indexName = "book",type="novel")
@Setter
@Getter
public class Novel {
    @Id
    private String id;
    private String title;
    private String author;
    private Integer word_count;
    private Date publish_data;

    public Novel(){
      super();
    }
    

    @Override
    public String toString() {
        return "Novel{" +
                "id=" + id +
                ", title='" + title + '\'' +
                ", author='" + author + '\'' +
                ", word_count=" + word_count +
                ", publish_data=" + publish_data +
                '}';
    }
}

5. NovelController

import com.lx.search.elastic.entity.Novel;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import java.time.Duration;
import java.time.Instant;
import java.util.*;

@Controller
@RequestMapping("/novel")
public class NovelController {
    private static final String PATH="searchtitle";

    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;

    @Autowired
    private TransportClient client;

    /**
     * 搜索Title并且高亮显示
     */
    @RequestMapping("/search/title/{keyword}")
    public ModelAndView searchTitle(@PathVariable String keyword) {
        ModelAndView modelAndView=new ModelAndView();
        // 统计查询时间,这里开始
        Instant start = Instant.now();
        // 构造查询条件,使用标准分词器.
        QueryBuilder matchQuery = QueryBuilders.matchQuery("title", keyword).analyzer("standard").operator(Operator.OR);
        // 设置高亮,使用默认的highlighter高亮器
        HighlightBuilder highlightBuilder = new HighlightBuilder()
                .field("title")
                .preTags("<span style=\"color:red;font-weight:bold;font-size:15px;\">")
                .postTags("</span>");
        // 设置查询字段
        SearchResponse response = client.prepareSearch("book")
                .setQuery(matchQuery)
                .highlighter(highlightBuilder)
                // 设置一次返回的文档数量
                .setSize(10)
                .get();
        // 返回搜索结果
        SearchHits hits = response.getHits();
        // 统计搜索结束时间
        Instant end = Instant.now();
        System.out.println("共搜索到: "+hits.getTotalHits() + " 条结果" + "," + "共耗时: " +Duration.between(start, end).toMillis()/1000 + " 秒");
        List<Map<Object, Object>> novel=new ArrayList();
        for (int i=0;i<hits.getTotalHits();i++) {
            // 得到SearchHit对象
            SearchHit hit=hits.getAt(i);
            // 遍历结果,使用HashMap存放
            Map<Object,Object> map=new LinkedHashMap();
            map.put("Source As String", hit.getSourceAsString());
            // 返回String格式的文档结果
            System.out.println("Source As String:" + hit.getSourceAsString());
            map.put("Source As Map", hit.getSource());
            // 返回Map格式的文档结果
            System.out.println("Source As Map:" + hit.getSource());
            // 返回文档所在的索引
            map.put("Index", hit.getIndex());
            System.out.println("Index:" + hit.getIndex());
            // 返回文档所在的类型
            map.put("Type", hit.getType());
            System.out.println("Type:" + hit.getType());
            // 返回文档所在的ID编号
            map.put("Id", hit.getId());
            System.out.println("Id:" + hit.getId());
            // 返回指定字段的内容,例如这里返回完整的title的内容
            map.put("Title", hit.getSource().get("title"));
            System.out.println("title: " + hit.getSource().get("title"));
            // 返回文档的评分
            map.put("Scope", hit.getScore());
            System.out.println("Scope:" + hit.getScore());
            // 返回文档的高亮字段
            Text[] text = hit.getHighlightFields().get("title").getFragments();
            String hight="";
            if (text != null) {
                for (Text str : text) {
                    hight+=str;
                    System.out.println(str.toString());
                }
            }
            map.put("Highlight", hight);
            novel.add(map);
        }
        modelAndView.addObject("resultlist", novel);
        modelAndView.addObject("count", "检索出: "+"<span style=\"color:red;font-weight:bold;font-size:18px;\">"+hits.getTotalHits()+"</span>"+"条记录");
        modelAndView.addObject("time", ",共耗时: "+"<span style=\"color:red;font-weight:bold;font-size:18px;\">"+Duration.between(start, end).toMillis() + "</span>"+ "ms");
        modelAndView.setViewName(PATH);
        return modelAndView;
    }
}

6. 视图展示

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>【小说标题关键字搜索】</title>
    <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"  media="all">
    <link rel="stylesheet" th:href="@{/css/index.css}" />
</head>
<body>
      <div style="width:100%;height:60px;" align="center">
           <h2 style="color:#985f0d;">书籍名称关键字搜索</h2>
      </div>
      <br/>
      <div align="center">
          <span style="font-size: 18px;" th:utext="${count}"></span>
          <span style="font-size: 18px;" th:utext="${time}"></span>
      </div>
      <br/>
      <br/>
      <div class="bs-example" data-example-id="striped-table">
      <table class="table table-bordered table-hover">
             <thead>
                 <tr>
                     <th style="text-align:center;" scope="row">序号</th>
                     <th style="text-align:center;">Index</th>
                     <th style="text-align:center;">Type</th>
                     <th style="text-align:center;">ID</th>
                     <th style="text-align:center;">Title</th>
                     <th style="text-align:center;">Score</th>
                 </tr>
             </thead>
             <tbody>
                 <tr th:each="novel,stat:${resultlist}">
                     <th style="text-align:center;" th:text="${stat.count}"></th>
                     <th style="text-align:center;" th:text="${novel['Index']}"></th>
                     <th style="text-align:center;" th:text="${novel['Type']}"></th>
                     <th style="text-align:center;" th:text="${novel['Id']}"></th>
                     <th style="text-align:center;" th:utext="${novel['Highlight']}"></th>
                     <th style="text-align:center;" th:text="${novel['Scope']}"></th>
                </tr>
             </tbody>
      </table>
      </div>
</body>
</html>

 注意点如下:
      :如何model域中的属性值有HTML标签,使用th:utext解析即可.

      :如何获取遍历列表的序号,方式一:${stat.count}是从1开始的,方式  二:${stat.index}是从0开始的,如果从1开始就${stat.index+1}.

        :Thymeleaf遍历Map集合${novel['添加的对象名']}.

       :关键字高亮使用了ES的高亮器+Html标签+Thymeleaf解析含有Html标签的th:utext实现功能的.

7.搜索结果展示

  

8.搜索结果分析总结.

    8.1 分词器问题.

    使用的是standard分词器.就是默认按照中文一个字一个字的切分,使用的是全文搜索(),可以指定分词器,

   这里如何使用ik_max_word和ik_smart均不符合这里的场景的.

// 构造查询条件
QueryBuilder matchQuery = QueryBuilders.matchQuery("title", keyword).analyzer("standard").operator(Operator.OR);

     matchQuery会对查询语句进行分词,分词后查询语句中任何一个词项被匹配,文档就被搜索到了,如果想查询匹配所有关键字的文档就使用AND条件连接.只匹配一个的就使用OR.(多词查询使用).  

     这篇文章介绍比较好.match查询是如何使用bool查询的

     使用 Operator.OR (下面两个条件只要匹配了其中一个就可以搜索到文档了).

    搜索关键字:mybatis 云飞

     使用 Operator.AND(下面两个条件都要匹配,才能搜索到文档).

     搜索关键字:mybatis 云飞

    8.2 高亮器.

    ES提供了三种高亮器,默认的是highlighter高亮器,postings-highlighter高亮器,fast-vector-highlighter高亮器.默认的highlighter高亮器对保存的原始文档进行二次分析,速度最慢,但是不需要额外的存储空间.

  

至此.简单完成了ES的全文搜索搜索结果高亮加粗显示.

Elasticsearch实现复合查询高亮结果功能
12-01
一.Es的配置 实现es的全文检索功能的第一步,首先从与es进行连接开始,这里我使用的是es的5.x java api语法. public TransportClient esClient() throws UnknownHostException{ Settings settings = Settings.builder() .put("cluster.name", "my-application") //节点的名字 .put("client.transport.sniff", true) .build(); InetSock
基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等功能。该项目集成了.zip
最新发布
03-23
基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等功能。该项目集成了
ElasticSearch的全文搜索高亮显示: 提升搜索体验
禅与计算机程序设计艺术
01-18 983
1.背景介绍 ElasticSearch是一个开源的搜索和分析引擎,基于Lucene库,具有实时搜索、分布式搜索和高性能等特点。它可以用于实现全文搜索、文本分析、数据聚合等功能。在现代应用中,ElasticSearch被广泛应用于搜索引擎、知识管理系统、日志分析、实时数据处理等领域。 全文搜索是指在文档中搜索包含特定关键词的内容。高亮显示则是在搜索结果中以粗体或其他方式突出显示关键词,以便用户...
人工智能-项目实践-搜索引擎-基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等
02-26
searchEngine 是基于 ElasticSearch 和 Java 实现的搜索引擎系统,实现关键字高亮搜索、添加文本等功能。 该项目集成了 Spring Boot、ElasticSearch、RestHighLevelClient、Vue.js、Element-ui、Log4j 和 Fastjson 等相关技术。 通过 ElasticSearch 存储文章文本数据,并通过 RestHighLevelClient 访问服务器进行数据读取和存储,并通过 Vue.js 进行可视化操作。 后续将不断对项目进行优化,添加更多功能,欢迎感兴趣的同学一起交流学习
SpringBoot集成Elasticsearch(已实现各种ES操作,上手即可用)
04-18
本实例属于简单易上手并且能够拿来就用的SpringBoot ES 项目,全文使用的是ElasticsearchTemplate进行开发。 本实例涵盖ES中的各类操作,如索引操作、CRUD操作、批处理、结果排序、分页查询、检索查询、关键字查询、高亮显示、逻辑查询、过滤查询、分组查询等等。并且已经过生产环境验证,各位可放心使用。
elasticsearch 实现搜索关键字高亮显示(spring-data-elasticsearch
ratel的博客
02-29 3091
elasticsearch 实现搜索关键字高亮显示(spring-data-elasticsearch
ES搜索关键字并且返回模糊字段高亮
qq_40415205的博客
05-12 2907
一般来说,各个网站,首页的搜索,都会有进行全文搜索的示例,并且把模糊匹配的多个数据进行标记(高亮),这样便于全局检索关键的数据,便于客户进行浏览。基于此,本文简单介绍这种功能基本java 的 实现。类型ID: 1 线索、2 客户、3 商机、4 联系人、5 售前、6 订单、7 合同,下面是最终的想要的结果,搜索内容代码 1, type 是 类型。由于公司页面此功能隐藏了,本文就以接口调用返回看具体实现了。控制层 controller。// 构建查询条件 & 高亮。逻辑层 service。
ElasticSearch系列七:ElasticSearch搜索技术深入讲解之高亮
qq_40595922的博客
10-07 2223
介绍es检索高亮
java 搜索引擎 关键词高亮_ElasticSearch如何设置返回结果关键词高亮显示-Fun言
weixin_42345036的博客
02-24 495
前言类似于百度等搜索引擎,我们的搜索词都会在搜索结果中显示红色或其他高亮颜色,这就叫高亮显示ElasticSearch同样也是支持这个功能的,下面我们就看一下如何用es实现搜索结果的高亮显示教程1、重写高亮显示的mapper类package cn.funyan.blog.es;import com.alibaba.fastjson.JSONObject;import org.elasticsea...
elasticsearch搜索关键字高亮显示
修理男爵的博客
04-29 4152
使用 elasticsearch 时,有一个很常见的需求是,能在页面上将搜索出的结果中属于关键字的文字,进行高亮显示elasticsearch 对这个做了一定的支持,它能查询结果的基础上,额外返回需要高亮显示关键字的整个文本,至于具体你想怎么用它,需要根据业务自行实现。 http 请求体方式 在查询的时候,增加参数highlight,pre_tags,post_tags。highlight 中添加需要进行高亮展示关键字的字段。 GET /data_collect/_search { ...
[ElasticSearch系列六] 使用QueryBuilders、NativeSearchQuery实现es数据库对列表的各种操作{多条件,分页,排序,高亮显示(附高亮工具类)等}
热门推荐
萌小崔的博客
12-07 1万+
ElasticsearchTemplate封装ES客户端的一些原生api模板,方便实现一些查询,QueryBuilders是ES中的查询条件构造器,NativeSearchQuery 原生的查询条件类,用来和ES的一些原生查询方法进行搭配,实现一些比较复杂的查询,最终进行构建.build可作为ElasticsearchTemplate. queryForPage的参数使用
elasticsearch5.5.2实现搜索结果高亮显示搜索建议
06-22
elasticsearch5.5.2用javaAPI实现搜索结果高亮显示搜索建议源代码下载
spring boot使用elasticsearch分词,排序,分页,高亮简单示例
qq_26751319的博客
05-30 1666
最简单的elasticsearch案例,分词,分页,排序,高亮
es 7.x http 全文检索 完全匹配 高亮查询
Java持续实践
01-09 1510
文章目录全文检索完全匹配高亮查询 全文检索 请求方式get 请求url: http://127.0.0.1:9200/shopping/_search 请求体执行如下的请求: { "query":{ "match":{ "category":"小华" } } } 得到的查询结果如下: { "took": 13, "timed_out": false, "_shards": { "total":
六.全文检索ElasticSearch经典入门-高亮
墨家巨子@俏如来
04-04 7822
本篇文章我们来学习一下如何使用ElasticSearch实现搜索字段的高亮,许多应用都倾向于在每个搜索结果中 高亮 部分文本片段,以便让用户知道为何该文档符合查询条件。在 Elasticsearch检索高亮片段也很容易。
SpringBoot整合ES,通过倒排索引搜索高亮展示
m0_55070913的博客
08-30 220
在SpringBoot项目中,要通过ElasticSearch实现根据关键字搜索内容的功能。
es keyword类型 没有高亮
shakspers的博客
09-03 801
#elasticsearch version 7.6.2 GET /es/_search { "query":{ "bool":{ "match":{ "esname.keyword":{ "query":"elasticsearch" } } } }, "from":0, "size":10, "highlight":{ "fields":{ "esname":{ "pre_tags":"<em>", "pos.
ElasticSearch实现搜索关键字高亮显示
qq_38247316的博客
11-16 1814
数据显示 进入门户主站后,点击视频列表,列表为空 视频信息需要从ElasticSearch中获取,打开es 同时打开logstash,用来采集对应的MySQL video_pub中的数据到es的yv_video索引中 打开header插件,可视化es数据 npm run start > elasticsearch-head@0.0.0 start D:\elasticsearch-head > grunt server Running "connect:server" (connec
ES自己手动高亮
weixin_47669567的博客
10-13 1269
全文检索手动高亮完整代码
Elastic Search检索高亮显示
06-09
Elasticsearch 是一个基于 Lucene 的搜索引擎,可以通过它来实现检索高亮显示。下面是相关的实现步骤: 1. 创建索引:在 Elasticsearch 中,需要先创建一个索引来存储数据。索引可以理解为关系型数据库中的表。 2. 添加数据:将需要检索的数据添加到索引中。数据可以是结构化或非结构化的,Elasticsearch 支持多种数据格式。 3. 检索数据:通过 Elasticsearch 提供的 API 进行数据检索。可以使用 Query DSL 或者 Lucene 查询语法进行检索。Query DSL 是 Elasticsearch 提供的一种查询语言,可以进行高级查询。 4. 高亮显示:在查询结果中,可以对搜索关键字进行高亮显示Elasticsearch 提供了 highlight 参数来实现高亮显示,可以指定高亮显示的字段、前缀、后缀等。 下面是一个简单的例子: ``` GET /my_index/_search { "query": { "match": { "title": "Elasticsearch" } }, "highlight": { "fields": { "title": {} } } } ``` 上面的例子中,我们在 `my_index` 索引中搜索标题包含 "Elasticsearch" 的文档,并对搜索结果中的标题进行高亮显示。 需要注意的是,Elasticsearch 是一个非常灵活的搜索引擎,可以通过多种方式来实现检索高亮显示。上面的例子只是其中的一种实现方式,具体实现方法需要根据实际情况进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Java遍历Map五种方法 91106
  • GitHub创建分支两种方式 61072
  • IDEA设置字体随鼠标滚动放大缩小 26983
  • Java程序执行cmd命令 20124
  • Linux下使用Git教程(一) 19380

分类专栏

  • 开源阅读 4篇
  • Java开发进阶学习指南 9篇
  • SpringBatch 1篇
  • SpringBoot项目实战 13篇
  • LeetCode 1篇
  • 古文岛 1篇
  • 生活小悟 1篇
  • 编码规范 5篇
  • 大数据 5篇
  • Nginx 1篇
  • Web容器 9篇
  • Java开发备忘录 34篇
  • MyBatis框架 1篇
  • SpringMVC框架 1篇
  • IDEA实用指南 7篇
  • Linux 18篇
  • 设计模式
  • 并发编程 5篇
  • 数据结构与算法 7篇
  • SpringBoot框架 22篇
  • Spring框架 2篇
  • Redis缓存 7篇
  • 软件工具 24篇
  • Kafka中间件 4篇
  • MySQL数据库 6篇
  • 云原生 3篇

最新评论

  • Grafana+Prometheus监控篇-本地Windows机器

    mamingji: 感谢大佬教程。 再分享一个监控模板ID:10467 信息更丰富。。。

  • SpringBoot修改内置tomcat版本

    王猴酱香: 只用指定tomcat-embed-core,这一种依赖就能行了吗

  • Linux下搭建Tomcat集群详细教程

    我是菜鸟中的拖拉机: 2个单机

  • 通用HttpClient封装

    啊祝arzhu: 这里的单例模式可以使用 “双重检查” 实现

  • IDEA下解决Maven依赖冲突

    丘山一郎: 很实用的教程

您愿意向朋友推荐“博客详情页”吗?

  • 强烈不推荐
  • 不推荐
  • 一般般
  • 推荐
  • 强烈推荐
提交

最新文章

  • JAVA打印日志规范实践
  • 深入理解MySQL主从复制线程状态转变
  • JAVA正确的关闭IO流方式
2023年10篇
2022年23篇
2021年18篇
2020年11篇
2019年3篇
2018年58篇
2017年13篇

目录

目录

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大道之简

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家江苏玻璃钢装饰绵阳玻璃钢装饰工程批发海东玻璃钢产品加工河北玻璃钢花池清远玻璃钢人物雕塑多少钱青岛不锈钢雕塑制作沧州玻璃钢产品制造通化玻璃钢树池批发南平玻璃钢外壳哪家好酒泉玻璃钢景观雕塑洛阳玻璃钢制造昌都玻璃钢花盆厂家直销德阳玻璃钢装饰工程价格太原玻璃钢景观雕塑定做邯郸玻璃钢医疗外壳生产厂家梅州玻璃钢花盆公司广东玻璃钢天花吊顶厂家直销百色玻璃钢沙发加工荆门玻璃钢花池厂家晋中玻璃钢树池坐凳厂家三明不锈钢雕塑池州玻璃钢浮雕哪家好成都玻璃钢机械外壳多少钱荆州玻璃钢沙发厂家直销林芝玻璃钢茶几厂中山玻璃钢花钵价格昌都玻璃钢制品价格北京玻璃钢花盆定制襄阳玻璃钢公仔雕塑价格上海玻璃钢装饰工程加工香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化