精华内容
下载资源
问答
  • <!DOCTYPE html> <... <head> ...JS关键字文本高亮</title> </head> <body> <div id="content"> 有过于江上者,见人方引婴儿而欲投之江中,婴儿啼。人问其故。曰:
    <!DOCTYPE html>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>JS关键字文本高亮</title>
    </head>
      <body>
        <div id="content">
          有过于江上者,见人方引婴儿而欲投之江中,婴儿啼。人问其故。曰:“此其父善游。”
          其父虽善游,其子岂遽善游哉?以此任物,亦必悖矣。
          有个经过江边的人,看见一个人正拉着一个小孩要把他投到江里去,小孩吓得直哭。过江的人忙问这样做的原因,那人回答:“这孩子的父亲擅长游泳。”
          孩子的父亲虽然擅长游泳,这个小孩难道也立即会游泳吗?这样处理事情,肯定是谬误的啊!
        </div>
        <script>
           var content = document.getElementById("content");
           var contents = content.innerHTML;
           var text = document.getElementById("text");
    	   
           var value = '的';
           var values = contents.split(value);
           document.body.innerHTML = values.join('<span style="background:red;">' + value + '</span>');
        </script>
      </body>
    </html>
    <br />
    <br />
    <br />
    <!DOCTYPE>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>关键字文本高亮</title>
    </head>
      <body>
        <div id="content">
         有过于江上者,见人方引婴儿而欲投之江中,婴儿啼。人问其故。曰:“此其父善游。”
         其父虽善游,其子岂遽善游哉?以此任物,亦必悖矣。
    	 有个经过江边的人,看见一个人正拉着一个小孩要把他投到江里去,小孩吓得直哭。过江的人忙问这样做的原因,那人回答:“这孩子的父亲擅长游泳。”
    	 孩子的父亲虽然擅长游泳,这个小孩难道也立即会游泳吗?这样处理事情,肯定是谬误的啊!
        </div>
        <input type="text" id="text" placeholder="请输入关键字"/>
        <input type="button" id="button" value="确定"/>
        <script>
           var content = document.getElementById("content");
           var contents = content.innerHTML;
           var text = document.getElementById("text");
           var button = document.getElementById("button");
           button.onclick = function() {
             var value = text.value;
             var values = contents.split(value);
             content.innerHTML = values.join('<span style="background:red;">' + value + '</span>');
           };
        </script>
      </body>
    </html>
    
    
    

    在这里插入图片描述

    展开全文
  • 建立一个基于LED的系统需要完成以下工作:1. 确定LED使用数量以及LED之间的连接方案;2. 选择线形模式或开关模式来驱动LED;3. 选择供电电源,即直流电压、交流电源或电池;4. 光学分系统例如透镜、表层滤镜等。...
  • Lucene搜索(含高亮

    2019-04-18 16:28:03
    场景:搜索关键词进行内容搜索,且需要性能要求如图: 怎么做到,大概的思路就是就是把整个需要作为搜索的内容,例如文章标题、文章内容,拆解细小碎片化的内容,并建立对应的索引。当搜索的时候,就可以把搜索...

    场景:搜索关键词进行内容搜索,且需要性能要求如图:

    怎么做到,大概的思路就是就是把整个需要作为搜索的内容,例如文章标题、文章内容,拆解细小碎片化的内容,并建立对应的索引。当搜索的时候,就可以把搜索关键词也进行拆解细小碎片化的内容,去需要对应的索引,以此来关联搜索的内容。大致流程如下:

    代码封装片段:

    using Lucene.Net.Analysis;
    using Lucene.Net.Documents;
    using Lucene.Net.Index;
    using Lucene.Net.Store;
    using LuncennePro.Models;
    using System.Collections.Generic;
    
    namespace LuncennePro.LuncenceService
    {
        public class ManualBulidIndex
        {
            /// <summary>
            /// 创建索引
            /// </summary>
            /// <param name="list">请求实体</param>
            /// <param name="isAppend">是否全量更新</param>
            public static void BulidIndex(List<ManualQuickSearchResponse> list, bool isAppend)
            {
                if (list == null || list.Count == 0)
                {
                    list = new List<ManualQuickSearchResponse>();
                }
                var dirpath = ComConstant.LucenceIndexPath;
                if (!System.IO.Directory.Exists(dirpath))
                {
                    System.IO.Directory.CreateDirectory(dirpath);
                }
    
                var directory = FSDirectory.Open(dirpath);//文件夹
                using (IndexWriter writer = new IndexWriter(directory, new PanGuAnalyzer(), isAppend, IndexWriter.MaxFieldLength.LIMITED))//索引写入器
                {
                    foreach (var item in list)
                    {
                        Document doc = ParseCItoDoc(item);
                        writer.AddDocument(doc);//写进去
                    }
                    writer.Optimize();
                }
            }
    
            /// <summary>
            /// 将实体转换成doc
            /// </summary>
            /// <param name="item"></param>
            /// <returns></returns>
            public static Document ParseCItoDoc(ManualQuickSearchResponse item)
            {
                Document doc = new Document();
                doc.Add(new Field(nameof(ManualQuickSearchResponse.Id), item.Id.ToString(), Field.Store.YES, Field.Index.NOT_ANALYZED));
                doc.Add(new Field(nameof(ManualQuickSearchResponse.Title), item.Title, Field.Store.YES, Field.Index.ANALYZED) { Boost = 5 });//分词
                doc.Add(new Field(nameof(ManualQuickSearchResponse.Content), item.Content, Field.Store.YES, Field.Index.ANALYZED));//分词
                return doc;
            }
        }
    }
    
    public class ManualQuery
        {
            #region QueryManualModel
    
            /// <summary>
            /// 查询
            /// </summary>
            /// <param name="pageIndex"></param>
            /// <param name="pageSize"></param>
            /// <param name="totalCount"></param>
            /// <param name="keywords"></param>
            /// <param name="categoryIdList"></param>
            /// <param name="idOrderBy"></param>
            /// <returns></returns>
            public List<ManualQuickSearchResponse> GetManualList(int pageIndex, int pageSize, out int totalCount, string keywords, string idOrderBy)
            {
                totalCount = 0;
                var luceneQuery = new LuceneQuery();
                if (string.IsNullOrWhiteSpace(keywords))
                {
                    return null;
                }
                string queryString = string.Format(" {0} {1}", $" {AnalyzerKeyword(keywords, nameof(ManualQuickSearchResponse.Title))}", $" {AnalyzerKeyword(keywords, nameof(ManualQuickSearchResponse.Content))}");
                return luceneQuery.QueryIndexPage(keywords, queryString, pageIndex, pageSize, out totalCount, idOrderBy);
            }
    
            #endregion QueryPdfModel
    
            /// <summary>
            /// 为keyword做盘古分词
            /// </summary>
            /// <param name="keyword">关键词</param>
            /// <param name="type">字段</param>
            /// <returns></returns>
            private string AnalyzerKeyword(string keyword, string type)
            {
                StringBuilder queryStringBuilder = new StringBuilder();
                LuceneAnalyze analyzer = new LuceneAnalyze();
                string[] words = analyzer.AnalyzerKey(keyword);
                if (words.Length == 1)
                {
                    queryStringBuilder.AppendFormat("{0}:{1}* ", type, words[0]);
                }
                else
                {
                    StringBuilder fieldQueryStringBuilder = new StringBuilder();
                    foreach (string word in words)
                    {
                        queryStringBuilder.AppendFormat("{0}:{1} ", type, word);
                    }
                }
                string result = queryStringBuilder.ToString().TrimEnd();
                return result;
            }
        }

    调用端代码:

    public class HomeController : Controller
        {
            public ActionResult Index(string searchKey)
            {
                var list = new List<ManualQuickSearchResponse>();
                if (!string.IsNullOrWhiteSpace(searchKey))
                {
                    list = new ManualQuery().GetManualList(1, 10, out int totalCount, searchKey.Trim(), string.Empty);
                }
                return View(list);
            }
    
            /// <summary>
            /// 初始化索引
            /// </summary>
            /// <returns></returns>
            public bool Init()
            {
                var list = new List<ManualQuickSearchResponse>
                {
                     new ManualQuickSearchResponse
                     {
                         Id =1,
                         Title="四川遂宁环保局32人集体受贿 一个局的领导几乎全军覆没",
                         Content=@"2017年12月,遂宁市纪委对遂宁市环保局,启动审查调查工作。结果,遂宁市环保局干部10人被查处,其中,县级干部6人、科级及以下干部4人。
                                  县级干部6人:原党组成员、市环境监测站站长张凯;原党组成员、总工程师付小斌;党组成员、副局长邹凯;党组成员、副局长沈剑飞;党组成员杨永生;原局长、党组书记梁仲勋(已退休)。
                                  科级及以下干部4人:监测站原副站长唐红军;是否还有单位的其他摄影器材在你那儿监测站原办公室主任王洁;信息中心原干部李相成;环科所原所长黄浩。共收缴违规违纪违法所得632万元。其中,收缴以上10人违纪违法所得565万元,另有全市环保系统50人主动说明问题并退交违规所得67万元。"
                     },
                     new ManualQuickSearchResponse
                     {
                         Id =2,
                         Title="央视新闻:“奔驰女车主维权”个案可以和解,根源还须深挖,致歉",
                         Content=@"维权靠“闹”不是一个法治社会应有的现象,也不是一个消费型经济体该出现的现象。从这个角度讲,西安奔驰女车主维权事件应该成为一个契机,真正推动中国消费市场向着法治化、公平化的轨道更进一步,才是我们今天关注这一事件的初衷。
                                西安奔驰车主维权一事又有了新的进展,针对车主所反映的金融服务费问题,国家税务总局西安高新技术产业开发区税务局前往西安利之星4S店进行了相关调查取证工作。16日,税务部门回应:奔驰车主王女士支付的金融服务费实际支付给了第三方公司,实为“垫资担保”费用。
                                此外,北京梅赛德斯奔驰销售服务公司发布声明,再度致歉,并表示立即暂停该授权店的销售运营,如果调查结果显示经销商存在不合法不合规的行为,将终止其授权。
                                16日晚,维权的奔驰车主王女士和西安利之星汽车有限公司已达成换车、补偿等和解协议(内容包括奔驰方面的道歉、换一台新车、退还金融服务费、车内装饰升级等),涉事车辆有关质量问题也已进入鉴定程序。"
                     },
                     new ManualQuickSearchResponse
                     {
                         Id =3,
                         Title="部长退休后摄影器材跟着退休 政府要3次才全要回",
                         Content=@"来源:中国纪检监察报跟着“退休”的摄影器材
                                “全市机构改革正在进行中,我们想借这次机会开展一次固定资产清查,我这次来,就是想邀请派驻纪检监察组对资产清查进行监督。”3月28日一上班,黑龙江省佳木斯市交通运输局党组书记、局长于波便来到市纪委监委驻市交通运输局纪检监察组组长李立新的办公室,开门见山说明了来意。
                                李立新果断答应了局党组的邀请。主动邀请纪检监察组进行监督,缘于去年该局出现的一起违纪案。
                                “组长,这两天我听交通运输局的同事在议论,再度致歉说以前陶部长在的时候,交通运输局内设的宣传部‘长枪短炮’啥都有,现在部长一退休,这些器材也都跟着‘退休’不见了。”2017年12月的一天,市纪委驻市交通运输局纪检组内部情况通报会上,纪检组干部小孙反映的一条信息引起了大家注意。
                                “有议论说明不是空穴来风,这个情况我会后和交通运输局党组沟通,督促他们尽快自查。”组长李立新当即表态。
                                市交通运输局党组得知这一信息后,指派了一名党组成员负责此事,并找到已经退休回家的交通运输局宣传部原部长陶英杰谈话,要求其对此情况作出说明。随后,陶英杰返还了一部单反相机和镜头。
                                事情本该到此结束,但是几天后,市纪委信访室转来一封举报信,信中直指陶英杰仍然占有单位多部摄影摄像器材……
                                在取得市交通运输局党组的支持后,纪检组针对陶英杰可能还存在占用公共财物的问题,与相关人员进行了谈话。
                                然而,随着谈话的深入,问题却越来越不清晰了。原来,市交通运输局宣传部主管领导和工作人员调整频繁,除了陶英杰外,谁也说不清宣传部到底有多少“家底”。无奈之下,纪检组决定直接向陶英杰了解情况。
                                “除了你已经归还的相机和镜头,是否还有单位的其他摄影器材在你那儿?”2018年1月初,纪检组与陶英杰进行第一次“正面交锋”。
                                “没有了,所有在我那儿的摄影摄像器材上次我都还回来了。”陶英杰直接否认。
                                “根据我们掌握的情况,2011年局里还曾给宣传部配备过一台索尼高清摄像机和专用长焦镜头,这些设备在哪儿?”
                                “那台高清摄像机已经换成掌中宝数码摄像机,交给执法部门使用了;长焦镜头换成两台具有夜视功能的摄像机交给前任局长了。”陶英杰不假思索地回答。
                                “那交接手续和单据呢?”
                                “都过去好多年了,我不记得了,而且只是一部机器,领导同意后,也就没留什么字据。”陶英杰一边搓着手一边说。"
                     },
                     new ManualQuickSearchResponse
                     {
                         Id =4,
                         Title="吉林市委原书记落马:投3亿客运站烂尾又投10亿新建",
                         Content=@"几天前我在推文里谈到过,深圳两任政法委书记落马,很可能已经对政法系统的政治生态造成了某种影响。话音刚落,就有消息称深圳福田区原区委副书记、政法委书记余智晟清明节后被带走调查,并明确指余智晟与刚被“双开”的深圳原市委副书记、政法委书记李华楠有关。余智晟弃政从商已经一年半了,现在看起来他还算个聪明人,很可能当时就嗅出了某些风向。但他的聪明又不“究竟”,有心事就找组织唠唠呗,“一走”岂能“了之”。
                                离深圳很远,但反腐态势又有些像的还有吉林。4月15日,吉林省政府原副秘书长、吉林市委原书记赵静波落马。媒体很快发现,这已经是吉林市4年来落马的第三个原市委书记。前两个分别是从一汽集团“掌门人”位置上落马的徐建一,以及从吉林省人大常委会副主任位置上退休后又被查的周化辰。
                                吉林市,是唯一一个和省同名的城市,甚至吉林省的名字都由此而来。你信不信,这种文辞上的巧合往往意味着某种现实影响力。何况这里六十多年前还曾是省会,何况这里还是仅次于长春的省内第二大城市。就是这样一个在吉林省内有着独特地位的城市,这几年来不但落马了三任市委书记,大小官员简直“更吹落,星如雨”。
                                比如市委常委、宣传部长朱淳,原吉林市副市长、在取得市交通运输局党组的支持后省住建厅副厅长魏连章,吉林市政协主席崔振吉,市城建委主任孙壮,市城建委原副主任刘彦光,原吉林市纪委书记、长春市委副书记杨子明。名字这么多,百家姓都快不够用了。在吉林市工作近十年先后担任市长、市委书记,赵静波与这些人或多或少都有交集。
                                吉林省的官员落马后,外界总是很难找到什么蛛丝马迹,吉林市也是如此。这样密不透风的地方,往往意味着往事太多。省委巡视组对于吉林市的巡视就很说明问题。2016年赵静波还在任市委书记,吉林省委第二巡视组当面向他反馈了巡视情况。"
                     },
                };
                ManualBulidIndex.BulidIndex(list, true);
                return true;
            }
        }
    @model List<LuncennePro.Models.ManualQuickSearchResponse>
    <head>
        <title>全文基础检索Demo</title>
        <script src="~/Scripts/jquery-3.3.1.min.js"></script>
        <script type="text/javascript">
    
            //初始化索引
            function initIndex() {
                $.get("/Home/Init", { rnd: Math.random() }, function (responseText) {
                    if (responseText == 'True') {
                        alert("初始化成功");
                    }
                });
            }
        </script>
    </head>
    <body>
        <h2>全文基础检索Demo</h2>
    
        <div>
            @using (Html.BeginForm("Index", "Home", FormMethod.Get, new { @id = "mainform" }))
            {
                <span>关键词:</span> <input type="text" value="" name="searchKey" />
                <br />
                <br />
                <input type="submit" value="查询" />
                <input type="button" value="初始化索引" onclick="initIndex()" />
                <br />
                <hr />
                <br />
                <table border="1" style="width:100%">
                    <tr>
                        <th width="30px">Id</th>
                        <th width="250px">标题</th>
                        <th>内容</th>
                    </tr>
                    @{
                        if (Model == null)
                        {
                            return;
                        }
                        foreach (var item in Model)
                        {
                            <tr>
                                <td>@item.Id</td>
                                <td>@Html.Raw(item.Title)</td>
                                <td>@Html.Raw(item.Content)</td>
                            </tr>
                        }
                    }
                </table>
            }
        </div>
    </body>
    
    
    

    运行效果:

    完整的代码Demo下载:https://pan.baidu.com/s/1KZdEOmnw5SeAy2y5L_gjEw  qci4   

    展开全文
  • PDF编辑工具是大家在...PDF添加高亮也是大家工作只时常会遇到的工作任务。那么如何将两者相结合,更加有效的完成工作任务呢。不要着急,跟着小编的文字,接着看下去把。 步骤如下: 1.首先需要打开电脑当中的...

        PDF编辑工具是大家在工作当中经常会使用到的,而使用较多的编辑工具则是PDF编辑器了。PDF添加高亮也是大家工作只时常会遇到的工作任务。那么如何将两者相结合,更加有效的完成工作任务呢。不要着急,跟着小编的文字,接着看下去把。

        步骤如下

        1.首先需要打开电脑当中的任意浏览器,在其中搜索迅捷PDF编辑器,并进行下载操作,在下载完成以后,安装到电脑当中。

     

    1240

        2.安装完成后,打开PDF编辑器,进入编辑器操作界面。鼠标左击左上角的打开选项,在弹出的窗口内查找PDF文件,并双击PDF文件名,将其在编辑器内打开。

     

    1240

        3.如下图所示,点击菜单栏中的工具选项,接着选择点击下方的注释和标记选项,之后再点击右侧列表内的高亮文本工具选项,并鼠标左击选中右侧的任意样式高亮文本工具。

     

    1240

        4.假如右侧的高亮文本工具都不合适,则鼠标右击高亮文本工具的图标,再左击下方的注释样式调板,在调板内自行更改高亮文本工具样式。

     

    1240

        5.在注释样式调板中,首先随意点击选中任意高亮文本工具,再在右侧对高亮文本工具的样式进行修改,修改完成后,点击上方的对勾。

     

    1240

        6.当高亮文本工具样式设定好之后,鼠标左击高亮文本工具图标,接着在编辑器内找到PDF文件要添加高亮的文章内容,找到后鼠标左击不放将内容选中,全部选中后放开鼠标,则成功添加高亮。

     

    1240

        以上所说就是结合PDF添加高亮和PDF编辑工具,顺畅的完成一系列的操作。小伙伴们要是喜欢的的话,记得多多关注小编哦。

    转载于:https://my.oschina.net/u/3907957/blog/1928349

    展开全文
  • springboot集成elasticsearch进行高亮查询

    千次阅读 2020-03-27 09:29:56
    环境: windows+jdk1.8 springboot2.1.7 elasticsearch6.2.2.... // 高亮字段 AggregatedPage ideas = elasticsearchTemplate.queryForPage(searchQuery, EsArticleBean.class, new SearchResultMapper() { @Override ...

    环境:

    windows+jdk1.8

    springboot2.1.7

    elasticsearch6.2.2.jar

    elasticsearch5.6.16客户端

     

    pom.xml

    <spring-boot.version>2.1.7.RELEASE</spring-boot.version>
    
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>

    直接上代码:

    yml

    spring:
      datasource:
        url: 
        username:
        password:
        showsql : true
        filters: wall,mergeStat
        type: com.alibaba.druid.pool.DruidDataSource
      redis:
        #redis使用开关
        use: true
        database: 1
        host: localhost
        port: 6379
        #jedis pool连接池的配置
        jedis:
          pool:
            max-active: 1024
            max-idle: 100
            min-idle: 0
            max-wait: -1
        password:
        timeout: 10000
      data:
        elasticsearch:
          repositories:
            enabled: true
          cluster-name: elasticsearch
          cluster-nodes: 127.0.0.1:9300 #9200是图形界面端,9300代码

     

    EsArticleBean.java

    package net.mingsoft.cms.es;
    
    import lombok.experimental.Accessors;
    import org.springframework.data.annotation.Id;
    import org.springframework.data.elasticsearch.annotations.Document;
    
    import java.util.Date;
    @Accessors(chain = true)
    @Document(indexName = "esarticle", type = "esarticles")
    public class EsArticleBean {
        @Id
        private String id;
        /**
         * 标题
         */
        private String title;
    
        /**
         * 内容
         */
        private String content;
        /**
         * 类型
         */
        private String type;
        /**
         * es查询类型
         */
        private String esType;
        /**
         * 作者
         */
        private String author;
        /**
         * 跳转链接地址
         */
        private String url;
        /**
         * 时间
         */
        private String date;
    
        /**
         * 发文字号
         */
        private String wjbh;
        /**
         * 公文种类
         * */
        private String wjType;
    
    
    
        public String getWjbh() {
            return wjbh;
        }
    
        public void setWjbh(String wjbh) {
            this.wjbh = wjbh;
        }
    
        public String getWjType() {
            return wjType;
        }
    
        public void setWjType(String wjType) {
            this.wjType = wjType;
        }
    
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getTitle() {
            return title;
        }
    
        public void setTitle(String title) {
            this.title = title;
        }
    
        public String getContent() {
            return content;
        }
    
        public void setContent(String content) {
            this.content = content;
        }
    
        public String getType() {
            return type;
        }
    
        public void setType(String type) {
            this.type = type;
        }
    
        public String getAuthor() {
            return author;
        }
    
        public void setAuthor(String author) {
            this.author = author;
        }
    
        public String getUrl() {
            return url;
        }
    
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getEsType() {
            return esType;
        }
    
        public void setEsType(String esType) {
            this.esType = esType;
        }
    
        public String getDate() {
            return date;
        }
    
        public void setDate(String date) {
            this.date = date;
        }
        public EsArticleBean(){
    
        }
        public EsArticleBean(String id, String title, String content, String type, String esType, String author, String url, String date) {
            this.id = id;
            this.title = title;
            this.content = content;
            this.type = type;
            this.esType = esType;
            this.author = author;
            this.url = url;
            this.date = date;
        }
    
        @Override
        public String toString() {
            return "EsArticleBean{" +
                    "id='" + id + '\'' +
                    ", title='" + title + '\'' +
                    ", content='" + content + '\'' +
                    ", type='" + type + '\'' +
                    ", esType='" + esType + '\'' +
                    ", author='" + author + '\'' +
                    ", url='" + url + '\'' +
                    ", date='" + date + '\'' +
                    '}';
        }
    }
    

    EsArticleController.java

    package net.mingsoft.cms.es;
    
    import io.swagger.annotations.*;
    import net.mingsoft.site.model.Sensitive;
    import net.mingsoft.site.model.SensitiveExample;
    import net.mingsoft.site.service.SiteSensitiveService;
    import org.apache.commons.lang.StringUtils;
    import org.elasticsearch.action.search.SearchResponse;
    import org.elasticsearch.index.query.BoolQueryBuilder;
    import org.elasticsearch.index.query.QueryBuilders;
    import org.elasticsearch.search.SearchHit;
    import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
    import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.data.domain.*;
    import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
    import org.springframework.data.elasticsearch.core.SearchResultMapper;
    import org.springframework.data.elasticsearch.core.aggregation.AggregatedPage;
    import org.springframework.data.elasticsearch.core.aggregation.impl.AggregatedPageImpl;
    import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
    import org.springframework.data.elasticsearch.core.query.SearchQuery;
    import org.springframework.web.bind.annotation.*;
    
    import java.text.DateFormat;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.*;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    
    import static org.elasticsearch.index.query.QueryBuilders.rangeQuery;
    @Api("es查询服务")
    @RestController
    @RequestMapping("/esArticle")
    
    public class EsArticleController {
    
        @Autowired
        private EsArticleService esArticleService;
        @Autowired
        private ElasticsearchTemplate elasticsearchTemplate;
        @Autowired
        private SiteSensitiveService siteSensitiveService;
    
    
        /**
         * 全文搜索判断敏感词
         * @param keyword 关键字
         * @return {@link } 接收到的数据格式为json
         */
        @GetMapping("/sensitiveFlag")
        @ApiOperation(value = "判断输入的内容是否为敏感词")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "keyword", value = "关键字", required = false,paramType="query"),
        })
        public boolean sensitiveFlag(String keyword){
            if(StringUtils.isEmpty(keyword)){
                return true;
            }
            List<Sensitive> list = siteSensitiveService.selectByExample(new SensitiveExample());
            boolean flag = true;
            if(null != list && !list.isEmpty()){
                for(Sensitive s : list){
                    if(s.getName().equals(keyword)){
                        flag = false;
                        break;
                    }
                }
            }
            if(!flag){
                return false;
            }
            return true;
        }
    
    
    
    
        /**
         * 全文搜索
         * @param keyword 关键字
         * @param pageNumber 当前页,从0开始
         * @param pageSize 每页大小
         * @return {@link } 接收到的数据格式为json
         */
        @GetMapping("/queryEsArticle")
        @ApiOperation(value = "es分页查询方法")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "pageNumber", value = "页数(第一页传0)", required = true,paramType="query"),
                @ApiImplicitParam(name = "pageSize", value = "每页的数量(一般为10或20)", required = true,paramType="query"),
                @ApiImplicitParam(name = "keyword", value = "标题和内容的关键字", required = false,paramType="query"),
                @ApiImplicitParam(name = "esType", value = "es查询类型,传类型的编码(文件:esWJ,资讯:esZX,公报;esGB,其他:esQT)", required = false,paramType="query"),
                @ApiImplicitParam(name = "dateType", value = "时间查询类型(0:一周,1:一个月,2:三个月)", required = false,paramType="query"),
        })
        public Page<EsArticleBean> queryEsArticle(int pageNumber,
                                                            int pageSize,String keyword,String esType,String dateType) {
            // if size is null, size default 10
            if (0 == pageSize){
                pageSize = 10;
            }
            //在此处判断用户输入的keyword中是否有敏感词
            BoolQueryBuilder builder = QueryBuilders.boolQuery();
            if (!StringUtils.isEmpty(keyword)) {
                builder.must(QueryBuilders.multiMatchQuery(keyword, "title", "content"));
            }
            if (!StringUtils.isEmpty(esType)) {
                builder.must(QueryBuilders.matchQuery("esType",esType));
            }
            //dateType  0:一周,1:一个月,2:三个月
            if (!StringUtils.isEmpty(dateType)) {
                Calendar c = Calendar.getInstance();
                if("0".equals(dateType)){
                    //当前时间年月日
                    c.add(Calendar.DATE, - 7);
                    Date time = c.getTime();
                    builder.must(rangeQuery("date").gte(time.getTime()));
                }else if("1".equals(dateType)){
                    c.add(Calendar.DATE, - 30);
                    Date time = c.getTime();
                    builder.must(rangeQuery("date").gte(time.getTime()));
                }else if("2".equals(dateType)){
                    c.add(Calendar.DATE, - 90);
                    Date time = c.getTime();
                    builder.must(rangeQuery("date").gte(time.getTime()));
                }
            }
            // 构造分页类
            Pageable pageable = PageRequest.of(pageNumber, pageSize);
    
            String preTag = "<font color='#dd4b39'>";//google的色值
            String postTag = "</font>";
    
            SearchQuery searchQuery = new NativeSearchQueryBuilder().
                    withQuery(builder).
                    withHighlightFields(
                            new HighlightBuilder.Field("title").preTags(preTag).postTags(postTag),
                            new HighlightBuilder.Field("content").preTags(preTag).postTags(postTag)
                            //,new HighlightBuilder.Field("esType").preTags(preTag).postTags(postTag)
                    ).build();
            searchQuery.setPageable(pageable);
    
            // 不需要高亮直接return ideas
            // AggregatedPage<Idea> ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class);
    
            // 高亮字段
            AggregatedPage<EsArticleBean> ideas = elasticsearchTemplate.queryForPage(searchQuery, EsArticleBean.class, new SearchResultMapper() {
    
                @Override
                public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
                    List<EsArticleBean> chunk = new ArrayList<>();
                    for (SearchHit searchHit : response.getHits()) {
                        EsArticleBean bean = new EsArticleBean();
                        if (response.getHits().getHits().length <= 0) {
                            return null;
                        }
                        bean = hitToEntity(searchHit);
                        //name or memoe
                        HighlightField title = searchHit.getHighlightFields().get("title");
                        if (title != null) {
                            bean.setTitle(title.fragments()[0].toString());
                        }
                        HighlightField ideaContent = searchHit.getHighlightFields().get("content");
                        if (ideaContent != null) {
                            bean.setContent(ideaContent.fragments()[0].toString());
                        }
    
                        chunk.add(bean);
                    }
                    if (chunk.size() > 0) {
                        return new AggregatedPageImpl<>((List<T>) chunk,pageable,response.getHits().getTotalHits());
                    }else{
                        return new AggregatedPageImpl<>((List<T>) new ArrayList<>());
                    }
                }
            });
    
            Page<EsArticleBean> pageData = ideas == null ? new PageImpl<>(new ArrayList<>(), pageable, 0) : new PageImpl<>(ideas.getContent(), pageable, ideas.getTotalElements());
    
            return pageData;
        }
    
    
        /**
         * 全文搜索政务公开
         */
        @GetMapping("/queryEsArticleZWGK")
        @ApiOperation(value = "es分页查询方法(政务公开)")
        @ApiImplicitParams({
                @ApiImplicitParam(name = "pageNumber", value = "页数(第一页传0)", required = true,paramType="query"),
                @ApiImplicitParam(name = "pageSize", value = "每页的数量(一般为10或20)", required = true,paramType="query"),
    
                @ApiImplicitParam(name = "title", value = "标题", required = false,paramType="query"),
                @ApiImplicitParam(name = "content", value = "正文", required = false,paramType="query"),
                @ApiImplicitParam(name = "wjType", value = "公文种类(洛政令,洛政,洛政办,洛政任,洛政土)", required = false,paramType="query"),
                @ApiImplicitParam(name = "wjbh", value = "发文字号", required = false,paramType="query"),
                @ApiImplicitParam(name = "year", value = "年份(如:2008)", required = false,paramType="query"),
                @ApiImplicitParam(name = "dataTime", value = "发布日期(如:2008-08-08)", required = false,paramType="query"),
        })
        public Page<EsArticleBean> queryEsArticleZWGK(int pageNumber,
                                                  int pageSize,String title,String content,String wjType,String wjbh,String year,String dataTime) throws ParseException {
            // if size is null, size default 10
            if (0 == pageSize){
                pageSize = 10;
            }
            //在此处判断用户输入的keyword中是否有敏感词
            BoolQueryBuilder builder = QueryBuilders.boolQuery();
            if (!StringUtils.isEmpty(title)) {
                builder.must(QueryBuilders.multiMatchQuery(title, "title"));
            }
            if (!StringUtils.isEmpty(content)) {
                builder.must(QueryBuilders.multiMatchQuery(content, "content"));
            }
            if (!StringUtils.isEmpty(wjType)) {
                builder.must(QueryBuilders.multiMatchQuery(wjType, "wjType"));
            }
            if (!StringUtils.isEmpty(wjbh)) {
                builder.must(QueryBuilders.multiMatchQuery(wjbh, "wjbh"));
            }
    
            //年份查询
            if (!StringUtils.isEmpty(year) && isNumeric(year)) {
                Long startTime = getYearStartTime(year);
                Long endTime = getYearEndTime(String.valueOf(Integer.valueOf(year)+1));
                builder.must(rangeQuery("date").gte(startTime).lte(endTime));
            }
            //年月日查询
            if (!StringUtils.isEmpty(dataTime)) {
                Long startTime = getTimeStartTime(dataTime);
                Long endTime = getTimeEndTime(dataTime);
                builder.must(rangeQuery("date").gte(startTime).lte(endTime));
            }
    
            // 构造分页类
            Pageable pageable = PageRequest.of(pageNumber, pageSize);
    
            String preTag = "<font color='#dd4b39'>";//google的色值
            String postTag = "</font>";
    
            SearchQuery searchQuery = new NativeSearchQueryBuilder().
                    withQuery(builder).
                    withHighlightFields(
                            new HighlightBuilder.Field("title").preTags(preTag).postTags(postTag),
                            new HighlightBuilder.Field("content").preTags(preTag).postTags(postTag)
                            //,new HighlightBuilder.Field("esType").preTags(preTag).postTags(postTag)
                    ).build();
            searchQuery.setPageable(pageable);
    
            // 不需要高亮直接return ideas
            // AggregatedPage<Idea> ideas = elasticsearchTemplate.queryForPage(searchQuery, Idea.class);
    
            // 高亮字段
            AggregatedPage<EsArticleBean> ideas = elasticsearchTemplate.queryForPage(searchQuery, EsArticleBean.class, new SearchResultMapper() {
    
                @Override
                public <T> AggregatedPage<T> mapResults(SearchResponse response, Class<T> clazz, Pageable pageable) {
                    List<EsArticleBean> chunk = new ArrayList<>();
                    for (SearchHit searchHit : response.getHits()) {
                        EsArticleBean bean = new EsArticleBean();
                        if (response.getHits().getHits().length <= 0) {
                            return null;
                        }
                        bean = hitToEntity(searchHit);
                        //name or memoe
                        HighlightField title = searchHit.getHighlightFields().get("title");
                        if (title != null) {
                            bean.setTitle(title.fragments()[0].toString());
                        }
                        HighlightField ideaContent = searchHit.getHighlightFields().get("content");
                        if (ideaContent != null) {
                            bean.setContent(ideaContent.fragments()[0].toString());
                        }
    
                        chunk.add(bean);
                    }
                    if (chunk.size() > 0) {
                        return new AggregatedPageImpl<>((List<T>) chunk,pageable,response.getHits().getTotalHits());
                    }else{
                        return new AggregatedPageImpl<>((List<T>) new ArrayList<>());
                    }
                }
            });
    
            Page<EsArticleBean> pageData = ideas == null ? new PageImpl<>(new ArrayList<>(), pageable, 0) : new PageImpl<>(ideas.getContent(), pageable, ideas.getTotalElements());
    
            return pageData;
        }
    
        /**
         * 利用正则表达式判断字符串是否是数字
         * @param str
         * @return
         */
        public boolean isNumeric(String str){
            Pattern pattern = Pattern.compile("[0-9]*");
            Matcher isNum = pattern.matcher(str);
            if( !isNum.matches() ){
                return false;
            }
            return true;
        }
    
        /**
         * 获取年的开始时间戳
         *
         * @param year  年份
         * @return
         */
        public static Long getYearStartTime(String year) throws ParseException {
            DateFormat df = new SimpleDateFormat("yyyy");
            Date date = df.parse(year);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            long tim = cal .getTimeInMillis();
            return tim;
        }
    
        /**
         * 获取当年的最后时间戳
         *
         * @return
         */
        public static Long getYearEndTime(String year) throws ParseException {
            DateFormat df = new SimpleDateFormat("yyyy");
            Date date = df.parse(year);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            long tim = cal .getTimeInMillis();
            return tim;
        }
    
    
        /**
         * 获取日期的开始时间戳
         *
         * @param dateTime  年份
         * @return
         */
        public static Long getTimeStartTime(String dateTime) throws ParseException {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Date date = df.parse(dateTime);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            long tim = cal .getTimeInMillis();
            return tim;
        }
    
    
        /**
         * 获取日期的结束时间戳
         *
         * @param dateTime  年份
         * @return
         */
        public static Long getTimeEndTime(String dateTime) throws ParseException {
            DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
            Date date = df.parse(dateTime);
            Calendar cal = Calendar.getInstance();
            cal.setTime(date);
            cal.set(Calendar.DATE, cal.get(Calendar.DATE) + 1);
            long tim = cal .getTimeInMillis();
            return tim;
        }
    
    
    
    
    
        private EsArticleBean hitToEntity(SearchHit searchHit) {
            EsArticleBean EsArticleBean = new EsArticleBean();
            EsArticleBean.setId(searchHit.getId() == null ? null : searchHit.getId());
            EsArticleBean.setTitle(String.valueOf(searchHit.getSourceAsMap().get("title")));
            EsArticleBean.setContent(String.valueOf(searchHit.getSourceAsMap().get("content")));
            EsArticleBean.setType(String.valueOf(searchHit.getSourceAsMap().get("type")));
            EsArticleBean.setEsType(String.valueOf(searchHit.getSourceAsMap().get("esType")));
            EsArticleBean.setAuthor(String.valueOf(searchHit.getSourceAsMap().get("author")));
            EsArticleBean.setUrl(String.valueOf(searchHit.getSourceAsMap().get("url")));
            EsArticleBean.setDate(String.valueOf(searchHit.getSourceAsMap().get("date")));
    
            return EsArticleBean;
        }
    
    }
    

    EsArticleRepository.java

    package net.mingsoft.cms.es;
    
    
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.Pageable;
    import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
    import org.springframework.stereotype.Component;
    
    /**
     * @author duanxiaozhou
     */
    @Component
    public interface EsArticleRepository extends ElasticsearchRepository<EsArticleBean,String> {
    
    
    
    
        Page<EsArticleBean> findByAuthor(String author, Pageable pageable);
    
        Page<EsArticleBean> findByTitle(String title, Pageable pageable);
    
    }
    

    EsArticleService.java

    package net.mingsoft.cms.es;
    
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    
    import java.util.List;
    import java.util.Optional;
    
    public interface EsArticleService {
    
        Optional<EsArticleBean> findById(String id);
    
        EsArticleBean save(EsArticleBean blog);
    
        void delete(EsArticleBean blog);
    
        Optional<EsArticleBean> findOne(String id);
    
        Page<EsArticleBean> findByAuthor(String author, PageRequest pageRequest);
    
        Page<EsArticleBean> findByTitle(String title, PageRequest pageRequest);
    
        List<EsArticleBean> findAll();
    
    }
    

    EsArticleServiceImpl.java

    package net.mingsoft.cms.es;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.beans.factory.annotation.Qualifier;
    import org.springframework.data.domain.Page;
    import org.springframework.data.domain.PageRequest;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    import java.util.Optional;
    
    @Service("esArticleService")
    public class EsArticleServiceImpl implements EsArticleService {
    
        @Autowired
        @Qualifier("esArticleRepository")
        private EsArticleRepository articleRepository;
    
    
        @Override
        public Optional<EsArticleBean> findById(String id) {
            //CrudRepository中的方法
            return articleRepository.findById(id);
        }
    
        @Override
        public EsArticleBean save(EsArticleBean blog) {
            return articleRepository.save(blog);
        }
    
        @Override
        public void delete(EsArticleBean blog) {
            articleRepository.delete(blog);
        }
    
        @Override
        public Optional<EsArticleBean> findOne(String id) {
            return articleRepository.findById(id);
        }
    
        @Override
        public List<EsArticleBean> findAll() {
            return (List<EsArticleBean>) articleRepository.findAll();
        }
    
        @Override
        public Page<EsArticleBean> findByAuthor(String author, PageRequest pageRequest) {
            return articleRepository.findByAuthor(author,pageRequest);
        }
    
        @Override
        public Page<EsArticleBean> findByTitle(String title, PageRequest pageRequest) {
            return articleRepository.findByTitle(title,pageRequest);
        }
    }

     

     

    展开全文
  • 但是DataTables本身没有提供搜索结果高亮显示的功能,需要引入相关JavaScript文件并编写相关代码。DataTables中文网提供了这一js文件,但是例子中 少写了一条设置样式的语句,所以无法实现高亮显示的功能 。 ...
  • jade_npp 自述文件取自 概述 这个项目为 Notepad++ 提供了一个非常简单的用户定义语言文件,它为玉文本做一些基本的语法突出显示。 用法 安装说明(取自 Notepad++ 网站 ): 将用户定义的语言下载到您的计算机 ...
  • yformater是一款chrome浏览器插件,用来格式化(高亮)服务端接口返回的json数据。  实际上小菜并不是第一个写这种插件的,但是现有的chrome json格式化插件实在是不太好用,索性小菜自己写一个,自己用的同时,分享...
  • 可是这个是匹配非反斜杠的www.e78.com何字符,它可以包含换行,而JS中的字符串是不允许写成换行的。所以我们需要加个\n让它不匹配换行。由于我们使用了或来连接,而或的优先级非常低,所以需要在旁边加上括号来...
  • ckeditor代码高亮模块 显示html代码块时html被实体输出的问题解决2018年12月12号发表于:评论 ()热度:1213最近使用ckeditor 的代码高亮是发现 , 第一次 把 html 代码写到 ckeditor 提交 后, 再编辑结果要显示的...
  • 第一步: 第二步:  恭喜你,你成功了。
  • a) 选中间一张图片,右侧修改属性,修改后记得保存。 b) 修改图像不生成小图模式 c) 保存为默认设置,删内容,再从word 中拷贝内容来时已经按设置进行了全部处理。 4. 发布日志 a) b) 5. 浏览日志 ...
  • 有了visualmark.vim插件可以在vim中使用mm高亮当前行,使用F2在标记的行间跳转。  如果提示“不能设定语言为en_US”,解决办法如下:  用gedit打开visualmark.vim找到exec ":lan mesen_US",将其改为如下内容...
  • C# 动态生成word文档 本文以一个简单的小例子,简述利用C#语言开发word表格相关的知识,仅供学习分享使用,如有不足之处,还请指正。 在工程中引用word的动态库 ...管理NuGet程序包,打开NuGet包管理器窗口,进行...
  • 实用的google chrome插件,22个的你选择 Reader,Relatposts: 让 Gmail更简洁的扩展 MinimalistGmail登陆 Chrome OnNumber同时监测 Gmail,Reader,Wave和 VoicChrome扩展 Chrom扩展:将 Facebook以 GooglBuzz...
  • 绿色的字母就是自动补全开始的位置,按下TAB键选择补全,高亮标注为灰色的部分就是AI补充的代码。 小哥表示,如此简单的模型下,使用深度学习来自动补全Python代码,仍可以减少30-50%的击键次数,真的是surprise...
  • 总结来说,Jupyter Notetook本身具有以下特点: 编程时具有语法高亮、缩进、tab补全的功能 可直接在浏览器中以代码块为单位运行代码,实时调试,运行输出直接显示在代码块下方 支持Markdown语法编写说明文档 支持...
  • 绿色的字母就是自动补全开始的位置,按下TAB键选择补全,高亮标注为灰色的部分就是AI补充的代码。 小哥表示,如此简单的模型下,使用深度学习来自动补全Python代码,仍可以减少30-50%的击键次数,真的是surprise! ...
  • 190种超全的解密工具你选!!

    千次阅读 2008-05-07 13:47:00
    QUOTE:第1种 1-2-3 Key 6.3.859 QUOTE: 软件介绍: 可以帮助你恢复加了密码的...只需执行1-2-3Key,在将Lotus1-2-3文件 (*.wk1、*.wk3、*.wk4、*.123)拖曳到1-2-3Key的视窗上即可将密码恢复,请勿将此程序 用于不法用
  • " 不要使用vi的键盘模式,而是vim自己的 set nocompatible " 语法高亮 set syntax=on " 去掉输入错误的提示声音 set noeb " 在处理未保存或只读文件的时候,弹出确认 set confirm " 自动缩进 set autoindent set ...
  • 各种选项卡,有hover之后切换的,有click之后切换的,有自动切换的,有手动才能切换的,有悬停一段时间才切换的等等八大种类,十几种小分类
  • Sublime Text 3 简介 http://www.sublimetext.com/... Sublime Text 3 : A sophisticated text editor for code, markup and prose ...Sublime 是一款非常好用且流行的轻量级编辑器,除了代码高亮、语法提示等标配外,...
  • 你可以把color后面的f0换成00-ff间的一个数,  C:\Documents and Settings\Administrator>help color  设置默认的控制台前景和背景颜色。  COLOR [attr]  attr 指定控制台输出的颜色属性  颜色属性由两个十六...
  • 戳蓝字“CSDN云计算”关注我们哦!作者 |yueliang2100责编 | 阿秃俗话说:三句不离本行,对于程序员这个可爱的群体来说也是一样,即使面对无休无止的编程工作,程序员们依旧...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,415
精华内容 966
关键字:

任高亮