精华内容
下载资源
问答
  • Lucene:全文检索技术 ...word文档、pdf文档等等 数据的查询 结构化数据的查询:sql语句 简单、查询速度快 非结构化数据:查询某个关键字? 条件复杂,查询难度大 顺序扫描法 字符串匹配(顺序扫

    Lucene:全文检索技术

    概念:先创建索引,然后再对索引搜索的过程就是全文检索技术;

    索引一次创建多次使用,表现为每次的查询速度很快。

    索引:一个为了提高查询速度,创建某种数据结构的集合。

    • 数据的分类:
      • 结构化数据:格式、长度、数据类型固定
        • 例如数据库的数据,
      • 非结构化数据:格式、长度、数据类型不固定
        • word文档、pdf文档等等
    • 数据的查询
      • 结构化数据的查询:sql语句
        • 简单、查询速度快
      • 非结构化数据:查询某个关键字?
        • 条件复杂,查询难度大
          • 顺序扫描法
          • 字符串匹配(顺序扫描)
          • 使非结构化的数据变为结构化的数据便于查询

    全文检索的应用场景
    • 搜索引擎
      • :百度、谷歌、搜索等等
    • 站内搜索
      • 论坛搜索,微博搜索,文章搜索
    • 电商搜索
      • jd,tb搜索

    什么是Lucene:

    Lucene是一个基于java开发全文检索工具包,提供了查询引擎和索引引擎

    如何实现全文检索:

    可以使用Lucene实现全文检索。Lucene是apache下的一个开放源代码的全文检索引擎工具包。提供了完整的查询引擎和索引引擎,部分文本分析引擎。Lucene的目的是为软件开发人员提供一个简单易用的工具包,以方便的在目标系统中实现全文检索的功能。

    Lucene实现全文检索的流程:

    ​	[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3QYy9Rth-1626361621537)(C:\Users\肖森波\AppData\Roaming\Typora\typora-user-images\image-20210404182630843.png)]

    • 创建索引

      • 获得文档
        • 原始文档:我们要基于的那些数据进行搜索
          • 搜索引擎:使用爬虫获得原始文档
          • 站内搜索:数据库的数据。
          • 案例:磁盘的文件:IO流获取
      • 构建文档对象
        • 注意:每个Document可以有多个Field,不同的Document可以有不同的Field,同一个Document可以有相同的Field(域名和域值都相同)
        • 一个文件创建一个文档对象
          • 一个文档对象有多个Field域(字段)比如:file_标题 file_内容 file_文件路径 等等
            • 一个(Field)域有域名称、域数据 (k-v形式 )
            • 且每一个文档有一个唯一的ID 文档id
      • 分析文档:就是分词的过程
        • (字符串分为单词列表)
        • 统一大小写
        • 去掉标点符号
        • 去除停用词(无意义的词)
          • 每个关键词封装为一个Term对象中
            • term中包含两个
              • ​ 关键词所在的域
              • ​ 关键词本身
      • 创建索引:基于关键词列表创建一个索引,保存索引库中
        • 索引库中包含

          • 索引

          • Document文档

          • 关键词和对应文档的关系

          • 通过词语找文档,这种索引的结构叫倒排索引结构

            倒排索引结构也叫反向索引结构,包括索引和文档两部分,索引即词汇表,它的规模较小,而文档集合较大。

    • 查询索引

      • 用户查询接口:比如一个查询输入框

      • 把关键字封装为查询对象

        • 要查询的域
        • 要搜索的关键词
      • 执行

        • 根据关键词对应的域进行查询,关键词去找对应的文档(倒排索引结构)
      • 渲染结果

        • 根据文档id对文档对象,对关键词进行高亮显示,分页处理,最终显示给用户看
    配置开发环境

    ​ Lucene官网下载:

    ​ 链接:https://pan.baidu.com/s/1IUfgnKP35NxZDxyGTbPEkw
    ​ 提取码:3odb

    ​ luck

    ​ 链接:https://pan.baidu.com/s/1loka5YFH7KHxzsG2lVDGfw
    ​ 提取码:yd91

    ​ IKAnalyzer

    ​ 链接:https://pan.baidu.com/s/1cCZktGtdAPV-rv9IRLm3Og

    ​ 提取码:kisq

    ​ 最低要jdk1.8

    ​ java工程和jar包

    ​ lucene-core

    ​ lucene-analyzers-common

    ​ commons-io

    ​ junit

    入门案例:

    步骤:

    创建索引库
    1. 创建一个Directory对象,指定索引库保存的位置 Directory directory = FS 一般保存在磁盘上

    2. 基于Directory对象,创建一个IndexWriter对象 IndexWriter indexwrite = new IndexWriter(directory ,new IndexWirterConfig());

    3. 读取磁盘上的文件,对应每一个文件一个文档对象

    4. 向文档对象中添加域

    5. 把文档对象写入索引库

    6. 关闭IndexWriter对象

      Directory directory = FSDirectory.open(new File("路径").toPath());//设定索引库存放位置
      IndexWirter indexwriter = new IndexWirter(directory,new IndexWirterConfig());//索引写入对象,使用此对象来讲文档写入索引库
      File dir = new File("路径");  //获取需要创建索引的文件的路径
      File[] files = dir.listFiles();//获取此路径下所有的文件
      for(File file:files){  //得到文件信息,建立并写入到域对象中去
        //文件信息     此处获取的是文件的名字、路径、大小、内容信息
        String fileName = file.getName();
        String fileSize = FileUtils.sizeof(file);
        String fileContent = FileUtils.readFileToString(file);
        String filePath = file.getPath();
        
        //创建域对象
        Field fieldName = new TextField("name",fileName,Field.Store.YES);
        Field fieldPath = new TextField("path",filePath,Field.Store.YES);
        Field fieldSize = new TextField("size",fileSize,Field.Store.YES);
        Field fieldContent = new TextField("content",fileContent,Field.Store.YES);
        
        Document document = new Document();//创建文件对象  一个文件对应一个文档对象   
        //向文档对象里面添加域对象
        document.add(fieldPath);
        document.add(fieldSize);
        document.add(fieldContent);
        document.add(fieldName);
        
        //使用索引写入对象将文档写入索引库
        indexWirter.addDocument(document);
        
        //释放资源
        indexWirter.close();
      }
      
    使用Luke工具查询索引库:

    上面使用的是Lucene是7.4.0版本的,若使用Luke工具的版本是和此对应的,就可以打开Lucene创建的索引库,需要注意的是此版本的Luke工具是JKD9编译的。

    总的来说就是根据不同版本的Lucene而选择对应的Luke工具的版本,否则将打不开索引库。

    当然创建索引库就是为了查询:下面给出查询步骤:

    查询索引库
    1. 创建一个Directory对象,指定索引库的位置

    2. 创建一个IndexReader对象

    3. 创建一个IndexSearcher对象构造方法为IndexReader对象

    4. 创建一个Query对象,tremQuery创建,并且设置需要查询的域对象和查询的关键字

    5. 执行查询,得到一个TopDocs对象

    6. 取查询结果的总记录条数

    7. 取文档列表

    8. 打印文档的内容 -----------------》到此处就是已经使用了索引查询到了我们需要的内容

    9. 关闭IndexReader对象

      Directory directory = FSDirectory.open(new File("路径").toPath());//获取到索引库的位置
      IndexReader indexreader = DirectorReader.open(dirctor);//基于directory创建一个索引读取对象
      IndexSeacher indexreacher = new IndexSeacher(indexreader);//基于索引读取对象获取索引查询对象
      Query query = new TremQuery(new Term("title","Lucene"));//创建查询对象query,Query是一个抽象类,需要他的视线类TremQuery创建
      TopDocs topdocs = indexSearcher.search(query,10);//使用indexSearcher对象进行查询,并且设置每次查询的数量
      System.out.println("总记录数"+topdcs.totalHits(););//获取击中的所有数量总和
      ScopeDoc[] ScopeDoc = topDocs.scoreDocs;//使用此方法scoreDocs可以获取到文档列表是一个数组,然后对数组进行查询
      for(ScopeDoc doc:ScopeDoc){
        int DocID = doc.doc;
        Doucment document = indexSearcher.doc(docId);//获取文档ID
        System.out.println(document.get("name"));
        System.out.println(document.get("path"));
        System.out.println(document.get("content"));
        System.out.println(document.get("size"));
      }
      //释放资源
      indexReader.close();
      

    分析器的分析过程

    标准分析器

    ​ 默认使用标准分析器StandarAnalyzer 使用标准分析器,会将汉语关键字拆分为一个汉字一个汉字的形式

    查看分析器的分析效果

    ​ 使用Analyzer对象的tokenStream方法返回一个TokenStream对象,此对象中包含了最终的分词结果

    ​ 步骤:

    1. 创建一个Analyzer对象,StandarAnalyzer对象

    2. 使用分析器对象的tokenStream方法获取TokenStream对象

    3. 向TokenStream对象设置一个引用,相当于一个指针

    4. 调用TokenStream对象的rest方法,如果不调用就抛异常

    5. 循环TokenStream对象

    6. 关闭TokenStream对象

      Analyzer analyzer = new StandarAnalyzer();//使用一个标准分析器
      TokenStream tokenstream = analyzer.tokenStream("xxxxx");//
      CharTermAttribute charTermAttribute = tokenstream.addAttribute(CharTermAttribute.Class);
      tokenstream.reset();
      while(tokenstream.incrementToken()){
        sout(charTermAttribute.ToString());
      }
      tokenStream.close();
      
    中文分析器:
    1. jar包
    2. 配置文件和扩展词典
      1. 扩展词典禁止使用Windows的记事本打开,一定要保证文件的编码格式为utf-8
      2. 扩展词典:添加一点新词
      3. 停用词词典:无意义的词和敏感词汇

    代码中使用:换一个IndexConfig的构造方法就行

    new IndexWriterConfig(new IKAnalyzer())//使用IkAnalyzer中文分析器
    

    索引库维护

    ​ 每一个域的属性:是否索引、是否分析、是否存储

    • 添加文档 :根据不同的数据类型来使用不同的域的类型去操作

      • //创建IndexWirter对象存入磁盘中并且设置中文解析器
        IndexWrirter indexwirter = new IndexWriter(new FSDocument.open(new File("路径")),new IndexWirterCongif(new IKAnalyzer()));
        //创建文档对象
        Document document = new Document();
        //文档中加入域对象
        document.add(new Field("name","新的",Field.STORE.YES));
        indexwriter.addDocument(document);
        indexwriter.close();
        
    • 删除文档

      • 全部删除

        • IndexWriter.deleteAll();
          IndexWriter.close();
          
      • 查询删除 针对性的删除

        • IndexWriter.deleteDecutments(new Term("name","apache"));
          IndexWriter.close();
          
    • 修改文档:原理是先删除后添加

      • Document document = new Document();
        document.add(new Field("name","新的",Field.STORE.YES));
        //更新操作
        indexwriter.updateDocument(new Field("name","原来的",document));
        indexwriter.close();
        
    索引库查询
    • 使用Query子类查询
      • TermQuery:关键词查询

        • Directory directory = FSDirectory.open(new File("路径").toPath());
          IndexReader indexReader = new Indexreader(directory);
          IndexSearcher indexSearcher = new IndexReader(indexreader);
          Query query = new TermQuery(new Term("content","Lucene"));//使用TermQuery查询
          TopDocs topDocs = indexSearcher.search(query,10);
          ScoreDoc[] scoreDocs = topDocs.scorcDocs;
          int sum = topDocs.titalHits;
          for(ScoreDoc scoreDoc:scoreDocs){
            int DocId = scoreDoc.doc;
            Document document = new Document();//获取文档对象的ID  根据域名称拿到值
            document = insearch.doc(DocId);
            document.get("content");//获取
            .....
          }
          indexSearcher.close();
          indexReader.close();
          
      • RangeQuery:范围查询

        • Query query = LongPoint.newRangeQuery("size", 0l, 100l);//其他都一样
          
    • QueryPaser:根据查询内容先分词后查询
      • jar包

      • Directory directory = FSDirectory.open(new File("path").toPath());
        IndexReader indexReader = new IndexReader(directory);
        IndexSearcher indexSearcher = new IndexReacher(indexReader);
        
        QueryParser queryParser = new QueryParser(Version.LUCENE_8_7_0,"name",new IkAnalyzer());//Lucene的版本   查询的域    解析器类型
        TopDocs topDocs = indexSearcher.search(queryParser,10);
        ScoreDoc[] scoreDocs = topDocs.scoreDoc;
        int sum = topDocs.totalHits;
        for(ScoreDoc scoreDoc:scoreDocs){
          Doucument document = indexSearcher.doc(scoreDoc.doc);
          document.get("content");//获取
          .....
        }
        indexSearcher.close();
        indexReader.close();
        
    展开全文
  • Word文档中的目录(TOC)概述了文档中...旨在执行.NET应用程序中的基本和高级Word自动化功能。此外,它可以熟练掌握Word文档中目录的操作。获取最新版。 使用C#在Word文档中添加目录 以下是使用Aspose.Words for .

    Word文档中的目录(TOC)概述了文档中包含的内容。此外,它还允许导航到文档的特定部分。在本文中,将学习如何使用C#以编程方式在Word文档中使用目录。特别是,本文介绍如何在Word文档中添加,提取,更新或删除目录。

    为了处理Word文档中的目录,将使用Aspose.Words for .NET API。旨在执行.NET应用程序中的基本和高级Word自动化功能。此外,它可以熟练掌握Word文档中目录的操作。获取最新版


    使用C#在Word文档中添加目录

    以下是使用Aspose.Words for .NET将目录添加到Word文档的步骤。

    • 创建Document类的实例(在加载现有Word文档的情况下,在构造函数中提供文件的路径)。
    • 创建DocumentBuilder类的实例,并使用之前创建的Document对象对其进行初始化。
    • 使用DocumentBuilder.InsertTableOfContents(“ \\ o \” 1-3 \“ \\ h \\ z \\ u”)方法插入目录。
    • 使用Document.UpdateFields()方法更新字段。
    • 使用Document.Save(String)方法保存Word文档。

    下面的代码示例演示如何在C#中的Word文档中添加目录。

    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
    // Initialize document.
    Document doc = new Document();
    DocumentBuilder builder = new DocumentBuilder(doc);
    
    // Insert a table of contents at the beginning of the document.
    builder.InsertTableOfContents("\\o \"1-3\" \\h \\z \\u");
    
    // The newly inserted table of contents will be initially empty.
    // It needs to be populated by updating the fields in the document.
    doc.UpdateFields();
    dataDir = dataDir + "DocumentBuilderInsertTOC_out.doc";
    doc.Save(dataDir);

    使用C#从Word文档中提取目录

    以下是从Word文档中的目录提取字段的步骤。

    • 使用Document类加载Word文档。
    • 使用Document.Range.Fields集合循环遍历文档中的每个Field。
    • 使用Field.Type属性检查字段类型是否为超链接。
    • 检查该字段是否在内容部分的表格下面。
    • 检索字段信息并打印。

    下面的代码示例演示如何使用C#从Word文档中提取目录。

    // The path to the documents directory.
    string dataDir = RunExamples.GetDataDir_WorkingWithDocument();
    
    string fileName = "TOC.doc";
    Aspose.Words.Document doc = new Aspose.Words.Document(dataDir + fileName);
    
    foreach (Field field in doc.Range.Fields)
    {
    	if (field.Type.Equals(Aspose.Words.Fields.FieldType.FieldHyperlink))
    	{
    		FieldHyperlink hyperlink = (FieldHyperlink)field;
    		if (hyperlink.SubAddress != null && hyperlink.SubAddress.StartsWith("_Toc"))
    		{
    			Paragraph tocItem = (Paragraph)field.Start.GetAncestor(NodeType.Paragraph);
    			Console.WriteLine(tocItem.ToString(SaveFormat.Text).Trim());
    			Console.WriteLine("------------------");
    			if (tocItem != null)
    			{
    				Bookmark bm = doc.Range.Bookmarks[hyperlink.SubAddress];
    				// Get the location this TOC Item is pointing to
    				Paragraph pointer = (Paragraph)bm.BookmarkStart.GetAncestor(NodeType.Paragraph);
    				Console.WriteLine(pointer.ToString(SaveFormat.Text));
    			}
    		} // End If
    	}// End If
    }// End Foreach

    使用C#更新Word文档中的目录

    每当将某些内容附加到Word文档时,都需要更新目录。为了以编程方式执行此操作,您只需要在保存文档之前调用Document.UpdateFields()方法即可。

    使用C#删除Word文档中的目录

    Aspose.Words for .NET还允许您从Word文档中删除目录。以下是执行此操作的步骤。

    • 首先,使用Document类加载Word文档。
    • 获取并在数组中存储每个TOC的FieldStart节点。
    • 循环遍历节点,直到获得FieldEnd类型(TOC的结尾)的节点。
    • 使用Node.Remove()方法删除节点并保存更新的文档。

    下面的代码示例演示如何从C#中的Word文档中删除目录。

    public static void Run()
    {
        
        // The path to the documents directory.
        string dataDir = RunExamples.GetDataDir_WorkingWithStyles();
    
        // Open a document which contains a TOC.
        Document doc = new Document(dataDir + "Document.TableOfContents.doc");
    
        // Remove the first table of contents from the document.
        RemoveTableOfContents(doc, 0);
    
        dataDir = dataDir + "Document.TableOfContentsRemoveToc_out.doc";
        // Save the output.
        doc.Save(dataDir);
        
        Console.WriteLine("\nSpecified TOC from a document removed successfully.\nFile saved at " + dataDir);
    }
    // Removes the specified table of contents field from the document.
    //The document to remove the field from.///The zero-based index of the TOC to remove.public static void RemoveTableOfContents(Document doc, int index)
    {
        // Store the FieldStart nodes of TOC fields in the document for quick access.
        ArrayList fieldStarts = new ArrayList();
        // This is a list to store the nodes found inside the specified TOC. They will be removed
        // At the end of this method.
        ArrayList nodeList = new ArrayList();
    
        foreach (FieldStart start in doc.GetChildNodes(NodeType.FieldStart, true))
        {
            if (start.FieldType == FieldType.FieldTOC)
            {
                // Add all FieldStarts which are of type FieldTOC.
                fieldStarts.Add(start);
            }
        }
    
        // Ensure the TOC specified by the passed index exists.
        if (index > fieldStarts.Count - 1)
            throw new ArgumentOutOfRangeException("TOC index is out of range");
    
        bool isRemoving = true;
        // Get the FieldStart of the specified TOC.
        Node currentNode = (Node)fieldStarts[index];
    
        while (isRemoving)
        {
            // It is safer to store these nodes and delete them all at once later.
            nodeList.Add(currentNode);
            currentNode = currentNode.NextPreOrder(doc);
    
            // Once we encounter a FieldEnd node of type FieldTOC then we know we are at the end
            // Of the current TOC and we can stop here.
            if (currentNode.NodeType == NodeType.FieldEnd)
            {
                FieldEnd fieldEnd = (FieldEnd)currentNode;
                if (fieldEnd.FieldType == FieldType.FieldTOC)
                    isRemoving = false;
            }
        }
    
        // Remove all nodes found in the specified TOC.
        foreach (Node node in nodeList)
        {
            node.Remove();
        }
    }

    如果您有任何疑问或需求,请随时加入Aspose技术交流群(761297826),很高兴为您提供查询和咨询。

    展开全文
  • 当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是使用服务器端的Apache poi技术将所有文档的文本获取后存储到数据库,...

    一、背景介绍

    Word文档与日常办公密不可分,在实际应用中,当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是使用服务器端的Apache poi技术将所有文档的文本获取后存储到数据库,然后打开文档时利用sql语句检索文档是否包含关键字来判断是否是打开文档。但是这种解决办法有很大的弊端,首先poi技术对word文档支持不是很好,其中支持word的接口单一而且不太稳定,对word文档的格式也要求很高。其次如果将成千上万个文档使用poi将其文本内容存储到数据库这一操作将会在很大程度上影响服务器的性能。本文的方案采用PageOffice提供的获取Word文档全文纯文本的功能,在每次编辑保存文件的同时,把Word文档全文纯文本提取出来保存到数据库,利用数据库sql语句检索文档是否包含关键字来实现这一需求。因为PageOffice获取全文的纯文本文档是客户端执行的,这样就在很大程度上减轻了对服务器的压力,提高了服务器的性能。

    二、主要实现代码

    1. 调用PageOffice在线打开word文件:test.doc

    PageOfficeCtrl poCtrl=newPageOfficeCtrl(request);//设置服务器页面

    poCtrl.setServerPage(request.getContextPath()+"/poserver.zz");//设置保存页面为SaveFile.jsp,或SaveFile.do SaveFile.action 等action方法或RequestMapping方法均可

    poCtrl.setSaveFilePage("SaveFile.jsp");//打开Word文档

    poCtrl.webOpen("doc/test.doc",OpenModeType.docNormalEdit,"张三");

    2. 在保存文件的页面(SaveFile.jsp)或方法里执行:

    FileSaver fs=newFileSaver(request,response);

    fs.saveToFile(request.getSession().getServletContext().getRealPath("SaveAndSearch/doc/")+"/"+fs.getFileName());

    fs.setCustomSaveResult("ok");

    String strDocumentText=fs.getDocumentText();//获取文档的纯文本内容,不带任何附加格式//--开始 更新数据库中文档的文本内容,以SQLite数据库为例 ---

    int id=Integer.parseInt(request.getParameter("id"));

    Class.forName("org.sqlite.JDBC");

    String strUrl= "jdbc:sqlite:"

    + this.getServletContext().getRealPath("demodata/") + "\\SaveAndSearch.db";

    Connection conn=DriverManager.getConnection(strUrl);

    Statement stmt=conn.createStatement();

    String strsql="update word set Content='"+strDocumentText+"' where id="+id;

    stmt.executeUpdate(strsql);

    stmt.close();

    conn.close();//--结束 更新数据库中文档的文本内容 ---

    fs.close();

    3. 需要对全文检索的时候,只需对数据库中保存了word文件纯文本内容的Content字段做查询即可实现。

    三、示例说明

    1. 下载地址:http://www.zhuozhengsoft.com/dowm/,下载PageOffice  for JAVA 开发包

    2. 示例部署:解压PageOffice开发包,拷贝Samples4文件夹到Tomcat的Webapps目录下,访问:http://localhost:8080/Samples4/index.html,查看示例演示:三、14、全文搜索包含关键字的Word文档

    展开全文
  • 我需要使用Servlet将MS Word文档存储和检索到MySQL 5.1中。我有上传文件的代码,但我不知道我可以加入表格。我已经在我要插入.doc文件的字段中使用了BLOB。这是我上传文件的代码片段:protected void doPost...

    我需要使用Servlet将MS Word文档存储和检索到MySQL 5.1中。我有上传文件的代码,但我不知道我可以加入表格。我已经在我要插入.doc文件的字段中使用了BLOB。

    这是我上传文件的代码片段:

    protected void doPost(HttpServletRequest request, HttpServletResponse response)

    throws ServletException, IOException {

    response.setContentType("text/html;charset=UTF-8");

    PrintWriter out = response.getWriter();

    try {

    // get access to file that is uploaded from client

    Part p1 = request.getPart("file");

    String type=p1.getContentType();

    String name=p1.getName();

    long size = p1.getSize();

    InputStream is = p1.getInputStream();

    //FileInputStream fis = is.

    // read filename which is sent as a part

    Part p2 = request.getPart("name");

    Scanner s = new Scanner(p2.getInputStream());

    String filename = s.nextLine(); // read filename from stream

    // get filename to use on the server

    String outputfile = this.getServletContext().getRealPath(filename); // get path on the server

    FileOutputStream os = new FileOutputStream (outputfile);

    // write bytes taken from uploaded file to target file

    int ch = is.read();

    while (ch != -1) {

    os.write(ch);

    ch = is.read();

    }

    os.close();

    out.println("

    File : '" + name + "' Type : '" + type + "' "

    + "of Size : " + ((double) size/1024) + "KB uploaded successfully!");

    }

    catch(Exception ex) {

    out.println("Exception -->" + ex.getMessage());

    }

    finally {

    out.close();

    }

    }

    在这里,我使用Servlets 3.0功能上传文件...

    我的表架构:

    resources

    - UserID [varchar(15)]

    - Document [mediumblob]

    任何人都可以帮助我如何将文档存储到表中,虽然BLOB是一种表示二进制数据的类型,但我如何检索为Word文档(* .doc)?

    展开全文
  • 前言,公司之前在线文档使用的Flash预览,用的es2全文检索,现在要进行项目整改,Flash现在不能用了,所以调整为KKFileView。对于ES也需要进行升级,添加IK中文分词器。所以就写了这篇文档进行总结与存档。 关于...
  • 需求场景开发的web办公系统如果需要处理大量的Word文档(比如有成千上万个文档),用户一定提出查找包含某些关键字的文档的需求,这就要求能够读取 word 中的文字内容,而忽略其中的文字样式、表格、图片等信息。...
  • 当某一文档服务器中有很多Word文档,假如有成千上万个文档时,用户查找打开包含某些指定关键字的文档就变得很困难,一般情况下能想到的解决方案是使用服务器端的Apache poi技术将所有文档的文本获取后存储到数据库,...
  • 电脑word搜索工具

    2021-07-27 02:08:05
    如何查找word程序在电脑的什么位置搜索word文档里的内容,步骤如下:1打开需要查看的word文档:2点击右上角箭头所指的查找。3在左侧箭头所示处填写需要查找的内容。4查找完成。扩展资料:word替换文档中所有的关键字...
  • 当前位置:我的异常网» MySQL»MySQL全文检索中Like目录的实现MySQL全文检索中Like目录的实现www.myexceptions.net网友分享于:2013-09-12浏览:9次MySQL全文检索中Like索引的实现MySQL全文检索中Like索引的实现* ...
  • publicclassTestQuery{publicstaticvoidmain(String[]args)throwsIOException,ParseException{Hitshits=null;//搜索内容自己换StringqueryString="根据国务院的决定";Queryquery=null;IndexSearchersearcher=...
  • 1:需求随着技术的发展,人们的需求也越来越高. Office 文件的在线处理也越来越受到人们的广泛关注.但文档太长的话,就需要搜索关键字查找自己想要的内容.并且高亮显示这些关键字2:方案用pageoffice 提供的执行 宏的js ...
  • 本文实例讲述了PHP+MySQL+sphinx+scws实现全文检索功能。分享给大家供大家参考,具体如下:我的个人环境是PHP7.1+MariaDB10.1.23下载安装资源包sphinx地址PHP的sphinx扩展下载SCWS 下载地址SCWS 词库下载地址安装...
  • Elasticsearch之全文检索

    千次阅读 2021-11-17 19:57:13
    比如: get kibana_sample_data_flights/_search { "query": { "multi_match": { "query": "AT", "fields": [ "DestCityName", "OriginCountry" ] } } } 请求将同时检索文档中DestCountry和OriginCountry这两个字段...
  • 使用自然语言搜索 有时,我们可能要搜索的文件需要多条筛选条件,此时就可以利用自然语言搜索功能来一次完成筛选。比如想搜索计算机中的DOC格式或者XLS格式的文件,只需在搜索栏中输入“*.doc or *. xls”,那么...
  • SCI检索高级教程

    2021-07-10 01:40:13
    《SCI检索高级教程》由会员分享,可在线阅读,更多相关《SCI检索高级教程(166页珍藏版)》请在人人文库网上搜索。1、Web of Science,研究领域出现频率最高的词,谁谁谁是xxx领域的牛人! 发表文章xxx篇 影响因子 文章...
  • 在使用word文档中当我们遇到需要替换一些特殊字符和格式的时候我们一般都是选择在菜单命令中查找,但是今天小编要给大家分享一个比较方便的操作方法,那就是使用一两个简单的代码来实现这个操作,这往往比在菜单中...
  • vue页面实现文本关键字检索,关键字高亮显示及定位功能 实现原理 将相应的关键字用标签包裹,添加相应的样式, 使用 dom.scrollIntoView() 方法实现定位功能 代码 html部分 <template> <div class=...
  • 这里我们需要简单了解几个目录: [D:coreseek-3.2.13-win32api]API接口目录,其中包括了php,python,ruby等操作实例,其中test_coreseek.php是一个不错的中文检索的例子. [D:****bin]应用程序目录,其中包含以下几个文件 ...
  • Laravel项目使用Elasticsearch进行全文检索功能 博主用的是mac + docker,所以就用docker进行讲解 只需五步骤: • 启动 集成 ik 中文分词插件的 Elasticsearch Docker 镜像 • Laravel 配置 Scout • 配置 Model ...
  • word一些实用小技巧

    2021-07-27 06:26:33
    重新启动word后,就会发现微软拼音不会一起启动了。(电脑入门到精通网 www.58116.cn)2、翻译文字:(电脑入门到精通网 www.58116.cn)先要安装好字典库,连线上网,通过网上资源翻译。选择准备翻译的文字,然后点选...
  • DailyTools日常工具类,提供如下功能:##将内容导出html这一部分没有难点,主要讲利用导出的html转成word内容,这里需要注意的是在导出到html的时候,一要注意中文编码问题,另外注意对字体字号等进行声明:WORD中对...
  • 怎么把html转换成word

    2021-06-10 12:43:08
    1 回答2021-05-06 浏览:0 分类:办公入门回答:点击菜单,选择另存为在弹出的窗口选择文档类型为...文件→使用 Microsoft Office Word 编辑,之后系统会自动打开 Word 并显示HTML文件的内容,这是保存即可。2、如果...
  • 《程序设计》课程设计姓 名:学 号:班 级:软件指导教师:成 绩:2013年6月设计题目一文本文件单词的检索与计数1.1【问题描述】设计C或C++程序,统计在这样的英文文本文件中,出现了多少个单词,每个单词出现了几次...
  • 信息检索期末复习

    千次阅读 2021-08-08 23:00:13
    报道性、检索性、汇编性、简明性 ④三次文献(既是信息检索和利用的对象,又是检索信息的工具) 在二次文献的基础上,将搜集到的一次文献进行再加工的产物 特点:综合性强、系统性好、知识面广、有的还具有检索功能 ...
  • 2018年职称计算机word2003考点辅导:用好Office2003中的...新一代的Microsoft Office2003使用“信息检索功能,可以在Word 2003、Excel 2003、Outlook 2003、PowerPoint 2003和Publisher2003中进行翻译。它使用本地...
  • 一、项目简介给定一个文本文件,要求统计给定单词在文本中出现的总次数,并检索输出某个单词出现在文本中的行号、在该行中出现的次数以及位置。本项目的设计要求可以分为三个部分实现:其一,建立一个文本文件,...
  • 从Mysql4.0开始就支持全文索引功能,但是Mysql默认的最小索引长度是4。如果是英文默认值是比较合理的,但是中文绝大部分词都是2个字符,这就导致...修改步骤:1、通过showvariableslike"ft%"查看ft_min_word_le...
  • 科研检索方法(网络空间安全)
  • 信息检索课程小结

    2021-02-09 08:55:39
    E1词频查询E1词频查询就是对一个英文文档进行词频统计,并实现查询功能。这是容易实现的,因为老师给的文档是处理好的,标点与单词间都有空格,直接读取文件,利用字典操作即可。E2汉语分词E2汉语分词需要利用最大...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,407
精华内容 14,962
关键字:

word目录检索功能