lucene搜索的时候可以去掉重复的索引只取一条吗?

lucene有这个功能吗?判断重复的条件是什么?可以自己指定吗?

4个回答

应该不会有吧。

虽然两条数据一样,但存的时候还是相当于两条数据,有两个不同的标识,只是里面的数据一样。luence估计也不能指定某个字段重复就不能存的功能,相当于主键那样。
只能自己写程序判断了。

建立索引之前先把索引文件删除干净,应该是不会出现这情况的。

怎么会有重复的索引呢?

理论上当然是可以的。
不过你要写个比较复杂的filter,对重复的索引的那个不同的field进行过滤。
过滤的规则,我想会根据你这个重复的索引的情况而定,可能会很复杂。
所以,常规来说,我们会对索引进行优化和整理,不允许重复的索引。

好像Lucene提供了类似的filter,DuplicateFilter 不过,不知道能否解决阁下的问题。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
lucene更新索引,被更新索引的还在,还能被搜索到

使用lucene进行索引更新时,被更新的那条索引还存在;如果单独调用删除索引的方法的话,那条索引可以被删除 代码如下: [color=red]// 生成索引[/color] public boolean saveIndex(String id, String userId, String url, String title, String contents, String author, String date) { File indexFile = new File(indexDirPath); indexFile.mkdirs(); if(!indexFile.exists()) { try { indexFile.createNewFile(); } catch (IOException e) { e.printStackTrace(); return false; } } File[] files = new File(indexDirPath).listFiles(); boolean isCreate = true; //判断索引文件的建立是新建还是追加模式 if(files.length>0) { isCreate = false; } /*超链接,主要应用于附件的使用,比如附件下载 每个元素的都是附件路径和附件名以逗号隔开的字符串*/ String accessStr = this.getUrlStr(id.trim()); IndexWriter indexWriter = null; Directory directory = null; try { directory = new SimpleFSDirectory(indexFile); //索引配置 IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_30, analyzer); //创建索引模式:CREATE,覆盖模式; APPEND,追加模式 if(isCreate) { indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE); } else { indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.APPEND); } // indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE); //初始化索引创建器 indexWriter = new IndexWriter(directory,indexWriterConfig); Document doc = new Document(); // 创建Field对象,并放入doc对象中 doc.add(new Field("id", id.trim(), Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("userId", userId, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("url", url, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("contents", contents, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("accesses", accessStr, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("author", author, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("date", date, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("indexDate", DateTools.dateToString(new Date(), DateTools.Resolution.DAY), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 写入IndexWriter indexWriter.addDocument(doc); // 查看IndexWriter里面有多少个索引 // System.out.println("numDocs" + indexWriter.numDocs()); indexWriter.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; } [color=red]// 删除索引[/color] public boolean deleteIndex(String id) { /*File classDir = new File(this.getClass().getClassLoader().getResource("").getPath()); String proDir = classDir.getParentFile().getParentFile().getPath();*/ File indexFile = new File(indexDirPath); // File indexDir = new File("D:\\temp\\indexDir"); Directory directory; try { directory = new SimpleFSDirectory(indexFile); /*IndexReader ir = IndexReader.open(directory,false); //true:索引打开模式为只读(readOnly); // false:索引打开模式不为可读,即为可更改 Term term = new Term("id",id); ir.deleteDocuments(term); ir.close();*/ IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_30, analyzer); IndexWriter iw = new IndexWriter(directory,indexWriterConfig); Term term = new Term("id",id); iw.deleteDocuments(term); iw.optimize(); iw.commit(); iw.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; } [color=red]// 更新索引的方法[/color] public boolean updateIndex(String id, String userId, String url, String title, String contents, String author, String date) { /*this.deleteIndex(id.trim()); if(this.deleteIndex(id.trim())) { this.saveIndex(id.trim(), userId, url, title, contents, author, date); }*/ File indexFile = new File(indexDirPath); // 超链接,主要应用于附件的使用,比如附件下载 每个元素的都是附件路径和附件名以逗号隔开的字符串 String accessStr = this.getUrlStr(id); Term term = new Term("id",id); IndexWriter indexWriter = null; Directory directory = null; try { directory = new SimpleFSDirectory(indexFile); //索引配置 // IndexWriterConfig indexWriterConfig=new IndexWriterConfig(Version.LUCENE_30, analyzer); //创建索引模式:CREATE,覆盖模式; APPEND,追加模式 // indexWriterConfig.setOpenMode(IndexWriterConfig.OpenMode.CREATE); //初始化索引创建器 indexWriter = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); indexWriter.setUseCompoundFile(true); Document doc = new Document(); // 创建Field对象,并放入doc对象中 doc.add(new Field("id", id, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("userId", userId, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("url", url, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("title", title, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("contents", contents, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("accesses", accessStr, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("author", author, Field.Store.YES, Field.Index.ANALYZED)); doc.add(new Field("date", date, Field.Store.YES, Field.Index.NOT_ANALYZED)); doc.add(new Field("indexDate", DateTools.dateToString(new Date(), DateTools.Resolution.DAY), Field.Store.YES, Field.Index.NOT_ANALYZED)); // 更新IndexWriter indexWriter.updateDocument(term, doc); // 查看IndexWriter里面有多少个索引 // System.out.println("numDocs" + indexWriter.numDocs()); indexWriter.commit(); indexWriter.close(); } catch (IOException e) { e.printStackTrace(); return false; } return true; }

lucene怎样将文档中一部分内容建立索引?

因为有大量的文档需要建立索引(上万),而且我要查找的并不是整个文档的内容,只要文档中的一部分 索引[color=red]我想知道怎样将一个文档中的一部分建立索引[/color],lucene有没有这样的机制? 还是说需要我在建立索引之前先将文档中我要建立索引的部分先读出来放到另外一个文件中,在对这个文件进行索引呢? 望指点啊!!!

lucene怎样在做增量索引的同时更新旧数据?

现在的项目要求做近实时索引,大约15分钟更行一次。数据会不断新增,而旧数据也会经常被修改。我计划用增量索引来做,根据数据库的更新时间来添加文档。但被更新的文档可能索引里已经有了,添加之后数据可能会重复。 请问如何消除这种重复的可能性,是每添加一个document时都先查一下索引里是不是已经有,还是记录数据库所有的修改操作并将id放到队列里,跑索引的时候一起更新?请问lucene有没有更好的内部机制解决这个问题,比如能不能像数据库一样指定unique的字段?

Lucene某条索引删除问题

我想问下 public static void deleteOneIndex(String indexDir, Analyzer analyzer, String field, String key) { try { Directory dir = new SimpleFSDirectory(new File(indexDir)); IndexWriter indexWriter = new IndexWriter(dir, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED); indexWriter.deleteDocuments(new Term(field, key)); indexWriter.optimize(); indexWriter.commit(); System.out.println("是否删除成功=" + indexWriter.hasDeletions()); System.out.println("一共有" + indexWriter.maxDoc() + "索引"); System.out.println("还剩" + indexWriter.numDocs() + "索引"); indexWriter.close(); } catch (IOException e) { System.out.println(" caught a " + e.getClass() + "\n with message: " + e.getMessage()); } } 这样为什么没有删除掉我想删除的索引 例如:deleteOneIndex("D:\\logs\\lucenedoc",new StandardAnalyzer(Version.LUCENE_33),"name","张三"); 没有分了 希望指点下,不胜感激!!

lucene对文件名、文件路径进行索引,搜索的时候不能检索出来

如题,lucene对文件名、文件路径都进行了索引,因为文件名、文件路径都包含特殊字符斜杠(/)和点(.),导致搜索的时候输入文件名或者路径,都无法搜索,使用/对字符进行转义也不行,请帮忙。 部分代码如下: protected Document getDocument(File f) throws IOException { Document doc = new Document(); doc.add(new Field("contents", new FileReader(f))); // System.out.println("=======f.getCanonicalPath()========"+f.getCanonicalPath()); // System.out.println("=======f.getName()========"+f.getName()); doc.add(new Field("fileName", f.getName(), Field.Store.YES,Field.Index.NOT_ANALYZED)); doc.add(new Field("fullpath",f.getCanonicalPath(),Field.Store.YES,Field.Index.NOT_ANALYZED)); return doc; } public void searchIndex(String key) throws CorruptIndexException, IOException, ParseException{ key = "C??work?output?张三?txt"; docDir = new File(indexDir); dir = FSDirectory.open(docDir); IndexSearcher indexSearcher = new IndexSearcher(dir); QueryParser parser = new QueryParser(Version.LUCENE_35, "fullpath", new StandardAnalyzer(Version.LUCENE_35)); Query query = parser.parse(key); TopDocs topDocs = indexSearcher.search(query, 10); System.out.println("====totalHits===="+topDocs.totalHits); for (ScoreDoc scoreDoc : topDocs.scoreDocs) { Document doc = indexSearcher.doc(scoreDoc.doc); System.out.println("====fullpath===="+doc.get("fullpath")); System.out.println("====fileName===="+doc.get("fileName")); } } 请给位大神帮忙,谢谢!

请问下lucene在重建索引的时候如何保证不影响当前搜索,谢谢

请问如何做到此业务场景,谢谢了

用的lucene 为什么查询的结果重复呢

用的lucene 索引建立没有重复 为什么查询的结果重复呢 代码如下: IndexSearcher searchers = new IndexSearcher( LuceneManager.article_index_path); Analyzer analyzer = new LuceneManager().getAnalyzer(); QueryParser queryParser = new QueryParser("title", analyzer); Query query = queryParser.parse(keyword); TopDocs topdocs = searchers.search(query, null, maxDocsCount, sort);

Lucene索引和检索中文文件的问题

lucene初学者,基础不好,碰到以下问题,恳请各位大侠指导,小女子感激不尽! 用的是IKAnalyzer2012_u6.jar和lucene-core-3.6.2.jar 是对本地的文件进行的索引和检索,做的web版的 1、能检索英文的,就是检索不了中文的 2、英文的检索出来的doc.get("contents")的值是空的,但是文件名和路径能读出来 (附件里有代码) [color=orange]IndexUtil1.java [/color] [code="java"]package com.lium.bean; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.index.CorruptIndexException; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.LockObtainFailedException; import org.apache.lucene.util.Version; import org.wltea.analyzer.lucene.IKAnalyzer; public class IndexUtil1 { private Directory directory; private String indexPath = "F:/Lucene/test/indexDir1.2"; private String dataPath = "F:/Lucene/test/dataDir1.2"; public IndexUtil1() { try { directory = FSDirectory.open(new File(indexPath)); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public String readFile(File f) { String s; StringBuffer text = new StringBuffer(); try { BufferedReader br = new BufferedReader(new FileReader(f)); while((s = br.readLine())!=null) { text.append(s); } return text.toString(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public void Index() { IndexWriter writer = null; try { Analyzer analyzer = new IKAnalyzer(); writer = new IndexWriter(directory, new IndexWriterConfig(Version.LUCENE_36, analyzer)); writer.deleteAll(); Document doc = null; File file = new File(dataPath); for (File f : file.listFiles()) { String text = readFile(f); doc = new Document(); doc.add(new Field("contents",text, Field.Store.YES,Field.Index.ANALYZED)); /*System.out.println(text);*/ /*text值没有问题,可以读出来*/ doc.add(new Field("filename", f.getName(), Field.Store.YES,Field.Index.NOT_ANALYZED)); doc.add(new Field("filepath", f.getCanonicalPath(),Field.Store.YES,Field.Index.NOT_ANALYZED)); writer.addDocument(doc); } } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (LockObtainFailedException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(writer != null) { try { writer.close(); } catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } }[/code] [color=orange]SearcherUtil.java[/color] [code="java"]package com.lium.bean; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.apache.lucene.document.Document; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; public class SearcherUtil { private Directory directory; private IndexReader reader; public SearcherUtil() { try { directory = FSDirectory.open(new File("F:/Lucene/indexDir")); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public IndexSearcher getsearcher() { try { if(reader == null) { reader = IndexReader.open(directory); }else { IndexReader dr = IndexReader.openIfChanged(reader); if(dr != null) { reader = dr; } } return new IndexSearcher(reader); } /*catch (CorruptIndexException e) { // TODO Auto-generated catch block e.printStackTrace(); }*/ catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public List<Results> seach(String keys) { try { IndexSearcher searcher = getsearcher(); Query query = new TermQuery(new Term("contents", keys)); TopDocs tds = searcher.search(query, 10); List<Results> rsList = new ArrayList<Results>(); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); /*System.out.println(doc.get("contents"));*/ /*这里打印出来值是空的*/ Results rs = new Results(doc.get("filename"), doc.get("filepath"), doc.get("contents")); rsList.add(rs); } return rsList; } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } } [/code] [color=orange]Results.java[/color] [code="java"]package com.lium.bean; public class Results { String filename; String filepath; String content; public Results(String filename, String filepath, String content) { super(); this.filename = filename; this.filepath = filepath; this.content = content; } public String getFilename() { return filename; } public void setFilename(String filename) { this.filename = filename; } public String getFilepath() { return filepath; } public void setFilepath(String filepath) { this.filepath = filepath; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } }[/code] [color=orange]ISservlet.java[/color] [code="java"]package com.lium.servlet; import java.io.IOException; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.lium.bean.IndexUtil1; import com.lium.bean.Results; import com.lium.bean.SearcherUtil; public class ISservlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { this.doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //System.out.println(request.getCharacterEncoding()); request.setCharacterEncoding("UTF-8"); String keys = request.getParameter("keywords"); IndexUtil1 iu = new IndexUtil1(); iu.Index(); SearcherUtil su = new SearcherUtil(); List<Results> rsList = su.seach(keys); if(rsList.size() > 0) { request.setAttribute("rsList", rsList); request.getRequestDispatcher("/SeacherResult.jsp").forward(request, response); } else { request.getRequestDispatcher("/fail.jsp").forward(request, response); } } }[/code] [color=orange]Seacher.html[/color] [code="java"]<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link href="bootstrap/css/bootstrap.min.css" type="text/css" rel="stylesheet"/> <title>用户搜索界面</title> </head> <body> <div class="container-fluid"> <div class="row-fluid"> <div class="span2"> <!--Sidebar content--> </div> <div class="span10"> <h2>A Simple Searcher</h2> <form class="form-search" action="web/ISservlet" method="post"> <input type="text" class="input-medium search-query" name="keywords"> <button type="submit" class="btn">搜索</button> </form> </div> </div> </div> </body> </html>[/code] [color=orange]SeacherResult.jsp[/color] [code="java"]<%@page import="java.util.List"%> <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@page import="com.lium.bean.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>搜索结果</title> </head> <body> <% List<Results> list=(List<Results>)request.getAttribute("rsList"); for(int i=0;i<list.size();i++) { Results rs = list.get(i); %> 文件名:<%=rs.getFilename()%><br> 文件内容:<%=rs.getContent()%><br> 文件路径:<%=rs.getFilepath()%><br> <% } %> </body> </html>[/code]

这样的需求是使用【lucene】还是使用 【数据库索引】

我有这样的一个需求: 一个数据库表格:(有很多个主要字段,其中内容固定,每个字段的长度都很短, 记录数10W+ 可能更多) 1.省份 | 2. 市 | 3. 街 | 4. 经度 | 5. 纬度 | ……………… 目标:1)可以实现:( 省市街 )三个条件的 单独 或者 组合 模糊查找如找 纬度:120~~130 以内 经度 80~~100以内 的记录 :如: 单查: “某某街” ( 符合要求的全部列出) 组合: "某" (市) "某" (街) 或者 "某" (省) "某" (街) ( 符合要求的全部列出) 2)经度和纬度是类似于 (123.48,46.54 )的双精度类型的数据 可以实现:通过给出一组 经纬度值,查出在其范围内的符合要求的记录 : 3)很短时间完成 以上需求都要把满足条件的 所有的字段 取出来,有可能以后要扩展! 您的回答1:需要这样的一些要求,是用Lucene好?还是数据库索引好?哪个速度快? 您的回答2:我们BOOS叫我用数据库索引,但是我不是DBA。才毕业,我用lucene做了个测试500W+的数据查找需要400毫秒左右!这样的速度是不是太慢了? 【2.5G的CPU,1G内存,XP】 您的回答3:我们BOOS昨天给我说,他的目标是:(10W+的模糊查找)【1毫秒】内出结果!我才毕业。觉得【1毫秒】太快了,真的可以吗?(我们用的是 mysql5 数据库) 请知道的前辈多说几句,我是一新人。在此先谢过了! 马上过年了,希望过个开心年啊!!谢谢大家了! [b]问题补充:[/b] 说老实话。。我也觉得1毫秒绝对不可能。可惜。。。 [b]问题补充:[/b] 问题是 用lucene快点还是 数据库索引快啊?? 今天又把我留下来学习。,。 叫我去弄。 我本来就是搞java的。喊我自己写 索引规则。。 我会个屁啊 [b]问题补充:[/b] 听说: 如果我想找上海酒店,价格在300~500之间。用Lucene处理,它会在内部形成类似这样的查询项: 地点:上海酒店 价格:300 地点:上海酒店 价格:301 ………… 地点:上海酒店 价格:500 总共要生成200个这样的查询项,这是倒排索引的机制所限定的。这还算好,如果客户来个100~10000,Lucene就直接挂掉了。 以上是在一个讨论中看到的。。 请问是吗? 如果在我的应用的经纬度的查询中,经纬度是 double的 我想办法把他转成int 在给lucene 索引,那样不是要生成 n万 个这样的查询项?

lucene4.0恢复索引问题

由于在备份索引时候,索引文件更新导致索引文件损坏,经检查是下图中文件,由于数据量很大,不想重建索引库,在6月份有一个备份的索引文件,但是6月份的数据比现在少了很多,请问有什么方法可以把索引恢复呀??急!![图片说明](https://img-ask.csdn.net/upload/201712/04/1512354394_501186.jpg)

WEB开发中Lucene创建索引时内存溢出

在查询数据库后创建索引过程中出现内存溢出,通过辅助软件查看,发现是很多的实体被占用没有被释放,导致堆内存溢出,是否有人遇到这种情况,如何解决? PS:增大JVM的堆内存,这种方式无效,因为实体越来越大,总会溢出。

lucene建索引的几个问题

1.如何将几个路径下的索引合并到一个统一的路径下并且将原来的索引清除? 2.在搜索的时候term是完全匹配吗?比如我搜索“好”,这个term必须是“好”才能搜索吗? 3.现在搜索的时候要搜“铅笔”,我希望可以搜索与铅笔完全匹配的document,也要搜到与铅,和笔分别匹配的,但是“铅笔”的排在前面,这个用目前的什么分词器可以做到?排序如何实现? 4.对于同一个field里的内容,可以用不同的分词器分析两次吗?同样parsequery的时候可以parse多次吗?

lucene分词会不会增大索引文件

我知道lucene可以分词索引和不分词索引。我想知道是哪个占用的空间会比较大?非常感谢。目前测试的结果是不分词的结果会小一点。不知道真的是不是这样。

Lucene.net 创建索引 txt文档

怎么用Lucene.net对已有的txt文本创建索引,索引文件__r.cfs,_r.cfx,segments.gen,segments_m是编代码之后自动生成的还是怎么来的?大致步骤是什么样的。

关于 Lucene3.3 特殊符号 (@#$%^&*) 无法索引问题

Lucene3.3 如题: 比如说 ,创建一个字符串“test_java”的索引,但是用_test来搜索,是搜不出 这条索引记录的。请问 ,如何在创建索引的时候, 把一些特殊符号 (@#$%^&*) 转化我想要的字符串,如空格等 ?听说是可以调 用分词器里面的方法过滤掉的。但是具体要怎么做?我看了很久的API,还是一头雾水。希望大家帮帮我。 测试代码: package test; import java.io.File; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.KeywordAnalyzer; import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.analysis.Token; import org.apache.lucene.analysis.TokenStream; import org.apache.lucene.analysis.cjk.CJKAnalyzer; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.analysis.tokenattributes.TermAttribute; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.Field.Index; import org.apache.lucene.document.Field.Store; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.index.Term; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TermQuery; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.util.Version; import org.junit.Test; public class Test { private static final Version MACTH_VERSION = Version.LUCENE_33; // version // number public void testCreate() throws IOException { Analyzer LUCENE_ANALUZER = new StandardAnalyzer(MACTH_VERSION); File indexDir = new File("D:\\index"); Directory dir = FSDirectory.open(indexDir); IndexWriterConfig iwc = new IndexWriterConfig(MACTH_VERSION, LUCENE_ANALUZER); // iwc.setOpenMode(IndexWriterConfig.OpenMode.CREATE); 创建索引时把历史索引删除 IndexWriter indexWriter = new IndexWriter(dir, iwc); Document document = new Document(); Field field = new Field("name", "java_Test", Store.YES, Index.ANALYZED); document.add(field); indexWriter.addDocument(document, LUCENE_ANALUZER); indexWriter.optimize(); indexWriter.close(); // close IndexWriter } public void testSearch() throws Exception { File indexDir = new File("D:\\index"); Directory dir = FSDirectory.open(indexDir); IndexSearcher indexSearcher = new IndexSearcher(dir); Term term = new Term("name", "_test"); Query query = new TermQuery(term); TopDocs topDocs = indexSearcher.search(query, Integer.MAX_VALUE); int totalResults = topDocs.totalHits; System.out.println(totalResults); for (int i = 0; i < totalResults; i++) { ScoreDoc scoreDoc = topDocs.scoreDocs[i]; int docSn = scoreDoc.doc; Document document = indexSearcher.doc(docSn); System.out.println(document.get("name")); } System.out.println(" ------------- "); indexSearcher.close(); } @Test public void testAnalyzer() throws Exception { String text = "test_java"; Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_33); System.out.println("当前使用的分词器:" + analyzer.getClass()); TokenStream tokenStream = analyzer.tokenStream("content",new StringReader(text)); tokenStream.addAttribute(TermAttribute.class); while (tokenStream.incrementToken()) { TermAttribute termAttribute = tokenStream.getAttribute(TermAttribute.class); System.out.println(termAttribute.term()); } tokenStream.end(); tokenStream.close(); } }

学习lucene建立检索和搜索过程中遇到的错误

使用lucene4.6.0版本建立的索引和搜索,在创建索引后会产生如下索引文件 [img] [img]http://dl2.iteye.com/upload/attachment/0096/4453/79ed3575-bec1-3dbf-bb93-067fe57531b5.png[/img] [/img] 但是在搜索时[code="java"] ScoreDoc[] sds = tds.scoreDocs; [/code]中的sds总为空。[b]求大神帮忙解决!!!!!!![/b] 代码如下: [code="java"] package nhky.bs.lucene.test.hellolucene; import java.io.File; import java.io.FileReader; import java.io.IOException; import org.apache.lucene.analysis.standard.StandardAnalyzer; import org.apache.lucene.document.Document; import org.apache.lucene.document.Field; import org.apache.lucene.document.FieldType; import org.apache.lucene.document.StoredField; import org.apache.lucene.index.DirectoryReader; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.IndexWriter; import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.queryparser.classic.ParseException; import org.apache.lucene.queryparser.classic.QueryParser; import org.apache.lucene.search.IndexSearcher; import org.apache.lucene.search.Query; import org.apache.lucene.search.ScoreDoc; import org.apache.lucene.search.TopDocs; import org.apache.lucene.store.Directory; import org.apache.lucene.store.FSDirectory; import org.apache.lucene.store.RAMDirectory; import org.apache.lucene.util.Version; public class HelloLucene { /** * 建立索引 */ public void index() { IndexWriter writer = null; try { Directory directory = FSDirectory.open(new File("F:/lucene/index01")); IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_46,new StandardAnalyzer(Version.LUCENE_46)); writer = new IndexWriter(directory, iwc); // 3,创建Document Document document = null; // 4,为Docuemnt添加Field File files = new File("F:/lucene/files"); // 5,通过IndexWriter添加文档到索引中 for (File file : files.listFiles()) { document = new Document(); document.add(new Field("content", new FileReader(file),new FieldType())); document.add(new StoredField("fileName", file.getName())); document.add(new StoredField("path", file.getAbsolutePath())); writer.addDocument(document); } } catch (IOException e) { e.printStackTrace(); } finally { if (writer != null) { try { writer.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 建立搜索 */ public void searcher() { DirectoryReader reader = null; try { // 创建Directory (去哪里搜索,此目录跟建立索引的目录一致) Directory directory = FSDirectory.open(new File("F:/lucene/index01")); reader = DirectoryReader.open(directory); IndexSearcher searcher = new IndexSearcher(reader); QueryParser parser = new QueryParser(Version.LUCENE_46, "fileName",new StandardAnalyzer(Version.LUCENE_46)); Query query = parser.parse("document"); //根据searcher搜索并且返回TopDocs TopDocs tds = searcher.search(query, 10); // 根据TopDocs获取ScoreDoc对象 // 得到查询结果数组 ScoreDoc[] sds = tds.scoreDocs; for (ScoreDoc sd : sds) { // 根据searcher和scoreDoc对象获取具体的Document对象 Document d = searcher.doc(sd.doc); // 根据Document获取需要的值 System.out.println("搜索结果:"); System.out.println(d.get("fileName") + "[" + d.get("path") + "]"); } } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } finally { // 关闭reader if (reader != null) { try { reader.close(); } catch (IOException e) { e.printStackTrace(); } } } } } [/code]

Lucene3.0.3配置 建立索引

进行Luence配置的过程中,到“Luence开发包中Demo调试”这步,“建立索引”,在DOS命令窗口中输入>java org.apache.lucene.demo.IndexFiles [D:\Java],回车,之后提示“文件名、目录名或卷标语法不正确。”问题出在哪里?输入Javac,有结果,应该不是环境变量设置的问题吧。求指点~

Lucene如何获得索引列表及每个索引对应的记录条数(类似于google的自动提示)

需要做一个自动提示的搜索引擎,当输入一个关键字时就能查找到与输入相关的全部关键字,并能获取它们所对应的总记录数。请问Lucene能否实现这样的功能?

Lucene能否像数据库那样对已存放记录的索引文件的某字段进行增/删/改?

比如现在的索引文件中的字段是articleid、title、content、create_date、userid,并且已经索引了10000个记录。 我现在需要将其中的userid字段删除掉,将date字段重命名为last_modify,同时增加一个visit_count字段。 请问Lucene是否支持这样的操作呢?

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

课程主要面向嵌入式Linux初学者、工程师、学生 主要从一下几方面进行讲解: 1.linux学习路线、基本命令、高级命令 2.shell、vi及vim入门讲解 3.软件安装下载、NFS、Samba、FTP等服务器配置及使用

我以为我对Mysql事务很熟,直到我遇到了阿里面试官

太惨了,面试又被吊打

Python代码实现飞机大战

文章目录经典飞机大战一.游戏设定二.我方飞机三.敌方飞机四.发射子弹五.发放补给包六.主模块 经典飞机大战 源代码以及素材资料(图片,音频)可从下面的github中下载: 飞机大战源代码以及素材资料github项目地址链接 ————————————————————————————————————————————————————————— 不知道大家有没有打过飞机,喜不喜欢打飞机。当我第一次接触这个东西的时候,我的内心是被震撼到的。第一次接触打飞机的时候作者本人是身心愉悦的,因为周边的朋友都在打飞机, 每

Python数据分析与挖掘

92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元 &nbsp; 为什么学习数据分析? &nbsp; &nbsp; &nbsp; 人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。 &nbsp; &nbsp; &nbsp; 从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。 &nbsp;&nbsp; 本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。 &nbsp; 二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。 &nbsp; 三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。 &nbsp; 四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。 &nbsp; 五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。

如何在虚拟机VM上使用串口

在系统内核开发中,经常会用到串口调试,利用VMware的Virtual Machine更是为调试系统内核如虎添翼。那么怎么搭建串口调试环境呢?因为最近工作涉及到这方面,利用强大的google搜索和自己

程序员的兼职技能课

获取讲师答疑方式: 在付费视频第一节(触摸命令_ALL)片头有二维码及加群流程介绍 限时福利 原价99元,今日仅需39元!购课添加小助手(微信号:csdn590)按提示还可领取价值800元的编程大礼包! 讲师介绍: 苏奕嘉&nbsp;前阿里UC项目工程师 脚本开发平台官方认证满级(六级)开发者。 我将如何教会你通过【定制脚本】赚到你人生的第一桶金? 零基础程序定制脚本开发课程,是完全针对零脚本开发经验的小白而设计,课程内容共分为3大阶段: ①前期将带你掌握Q开发语言和界面交互开发能力; ②中期通过实战来制作有具体需求的定制脚本; ③后期将解锁脚本的更高阶玩法,打通任督二脉; ④应用定制脚本合法赚取额外收入的完整经验分享,带你通过程序定制脚本开发这项副业,赚取到你的第一桶金!

MFC一站式终极全套课程包

该套餐共包含从C小白到C++到MFC的全部课程,整套学下来绝对成为一名C++大牛!!!

C++语言基础视频教程

C++语言基础视频培训课程:本课与主讲者在大学开出的程序设计课程直接对接,准确把握知识点,注重教学视频与实践体系的结合,帮助初学者有效学习。本教程详细介绍C++语言中的封装、数据隐藏、继承、多态的实现等入门知识;主要包括类的声明、对象定义、构造函数和析构函数、运算符重载、继承和派生、多态性实现等。 课程需要有C语言程序设计的基础(可以利用本人开出的《C语言与程序设计》系列课学习)。学习者能够通过实践的方式,学会利用C++语言解决问题,具备进一步学习利用C++开发应用程序的基础。

北京师范大学信息科学与技术学院笔试10复试真题

北京师范大学信息科学与技术学院笔试,可以更好的让你了解北师大该学院的复试内容,获得更好的成绩。

深度学习原理+项目实战+算法详解+主流框架(套餐)

深度学习系列课程从深度学习基础知识点开始讲解一步步进入神经网络的世界再到卷积和递归神经网络,详解各大经典网络架构。实战部分选择当下最火爆深度学习框架PyTorch与Tensorflow/Keras,全程实战演示框架核心使用与建模方法。项目实战部分选择计算机视觉与自然语言处理领域经典项目,从零开始详解算法原理,debug模式逐行代码解读。适合准备就业和转行的同学们加入学习! 建议按照下列课程顺序来进行学习 (1)掌握深度学习必备经典网络架构 (2)深度框架实战方法 (3)计算机视觉与自然语言处理项目实战。(按照课程排列顺序即可)

网络工程师小白入门--【思科CCNA、华为HCNA等网络工程师认证】

本课程适合CCNA或HCNA网络小白同志,高手请绕道,可以直接学习进价课程。通过本预科课程的学习,为学习网络工程师、思科CCNA、华为HCNA这些认证打下坚实的基础! 重要!思科认证2020年2月24日起,已启用新版认证和考试,包括题库都会更新,由于疫情原因,请关注官网和本地考点信息。题库网络上很容易下载到。

Python界面版学生管理系统

前不久上传了一个控制台版本的学生管理系统,这个是Python界面版学生管理系统,这个是使用pycharm开发的一个有界面的学生管理系统,基本的增删改查,里面又演示视频和完整代码,有需要的伙伴可以自行下

软件测试2小时入门

本课程内容系统、全面、简洁、通俗易懂,通过2个多小时的介绍,让大家对软件测试有个系统的理解和认识,具备基本的软件测试理论基础。 主要内容分为5个部分: 1 软件测试概述,了解测试是什么、测试的对象、原则、流程、方法、模型;&nbsp; 2.常用的黑盒测试用例设计方法及示例演示;&nbsp; 3 常用白盒测试用例设计方法及示例演示;&nbsp; 4.自动化测试优缺点、使用范围及示例‘;&nbsp; 5.测试经验谈。

Tomcat服务器下载、安装、配置环境变量教程(超详细)

未经我的允许,请不要转载我的文章,在此郑重声明!!! 请先配置安装好Java的环境,若没有安装,请参照我博客上的步骤进行安装! 安装Java环境教程https://blog.csdn.net/qq_40881680/article/details/83585542 Tomcat部署Web项目(一)·内嵌https://blog.csdn.net/qq_40881680/article/d...

2019数学建模A题高压油管的压力控制 省一论文即代码

2019数学建模A题高压油管的压力控制省一完整论文即详细C++和Matlab代码,希望对同学们有所帮助

图书管理系统(Java + Mysql)我的第一个完全自己做的实训项目

图书管理系统 Java + MySQL 完整实训代码,MVC三层架构组织,包含所有用到的图片资源以及数据库文件,大三上学期实训,注释很详细,按照阿里巴巴Java编程规范编写

linux下利用/proc进行进程树的打印

在linux下利用c语言实现的进程树的打印,主要通过/proc下的目录中的进程文件,获取status中的进程信息内容,然后利用递归实现进程树的打印

微信小程序开发实战之番茄时钟开发

微信小程序番茄时钟视频教程,本课程将带着各位学员开发一个小程序初级实战类项目,针对只看过官方文档而又无从下手的开发者来说,可以作为一个较好的练手项目,对于有小程序开发经验的开发者而言,可以更好加深对小程序各类组件和API 的理解,为更深层次高难度的项目做铺垫。

[已解决]踩过的坑之mysql连接报“Communications link failure”错误

目录 前言 第一种方法: 第二种方法 第三种方法(适用于项目和数据库在同一台服务器) 第四种方法 第五种方法(项目和数据库不在同一台服务器) 总结 前言 先给大家简述一下我的坑吧,(我用的是mysql,至于oracle有没有这样的问题,有心的小伙伴们可以测试一下哈), 在自己做个javaweb测试项目的时候,因为买的是云服务器,所以数据库连接的是用ip地址,用IDE开发好...

人工智能-计算机视觉实战之路(必备算法+深度学习+项目实战)

系列课程主要分为3大阶段:(1)首先掌握计算机视觉必备算法原理,结合Opencv进行学习与练手,通过实际视项目进行案例应用展示。(2)进军当下最火的深度学习进行视觉任务实战,掌握深度学习中必备算法原理与网络模型架构。(3)结合经典深度学习框架与实战项目进行实战,基于真实数据集展开业务分析与建模实战。整体风格通俗易懂,项目驱动学习与就业面试。 建议同学们按照下列顺序来进行学习:1.Python入门视频课程 2.Opencv计算机视觉实战(Python版) 3.深度学习框架-PyTorch实战/人工智能框架实战精讲:Keras项目 4.Python-深度学习-物体检测实战 5.后续实战课程按照自己喜好选择就可以

2019 AI开发者大会

2019 AI开发者大会(AI ProCon 2019)是由中国IT社区CSDN主办的AI技术与产业年度盛会。多年经验淬炼,如今蓄势待发:2019年9月6-7日,大会将有近百位中美顶尖AI专家、知名企业代表以及千余名AI开发者齐聚北京,进行技术解读和产业论证。我们不空谈口号,只谈技术,诚挚邀请AI业内人士一起共铸人工智能新篇章!

机器学习初学者必会的案例精讲

通过六个实际的编码项目,带领同学入门人工智能。这些项目涉及机器学习(回归,分类,聚类),深度学习(神经网络),底层数学算法,Weka数据挖掘,利用Git开源项目实战等。

Python数据分析师-实战系列

系列课程主要包括Python数据分析必备工具包,数据分析案例实战,核心算法实战与企业级数据分析与建模解决方案实战,建议大家按照系列课程阶段顺序进行学习。所有数据集均为企业收集的真实数据集,整体风格以实战为导向,通俗讲解Python数据分析核心技巧与实战解决方案。

YOLOv3目标检测实战系列课程

《YOLOv3目标检测实战系列课程》旨在帮助大家掌握YOLOv3目标检测的训练、原理、源码与网络模型改进方法。 本课程的YOLOv3使用原作darknet(c语言编写),在Ubuntu系统上做项目演示。 本系列课程包括三门课: (1)《YOLOv3目标检测实战:训练自己的数据集》 包括:安装darknet、给自己的数据集打标签、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计(mAP计算和画出PR曲线)和先验框聚类。 (2)《YOLOv3目标检测:原理与源码解析》讲解YOLOv1、YOLOv2、YOLOv3的原理、程序流程并解析各层的源码。 (3)《YOLOv3目标检测:网络模型改进方法》讲解YOLOv3的改进方法,包括改进1:不显示指定类别目标的方法 (增加功能) ;改进2:合并BN层到卷积层 (加快推理速度) ; 改进3:使用GIoU指标和损失函数 (提高检测精度) ;改进4:tiny YOLOv3 (简化网络模型)并介绍 AlexeyAB/darknet项目。

2021考研数学张宇基础30讲.pdf

张宇:博士,全国著名考研数学辅导专家,教育部“国家精品课程建设骨干教师”,全国畅销书《张宇高等数学18讲》《张宇线性代数9讲》《张宇概率论与数理统计9讲》《张宇考研数学题源探析经典1000题》《张宇考

三个项目玩转深度学习(附1G源码)

从事大数据与人工智能开发与实践约十年,钱老师亲自见证了大数据行业的发展与人工智能的从冷到热。事实证明,计算机技术的发展,算力突破,海量数据,机器人技术等,开启了第四次工业革命的序章。深度学习图像分类一直是人工智能的经典任务,是智慧零售、安防、无人驾驶等机器视觉应用领域的核心技术之一,掌握图像分类技术是机器视觉学习的重中之重。针对现有线上学习的特点与实际需求,我们开发了人工智能案例实战系列课程。打造:以项目案例实践为驱动的课程学习方式,覆盖了智能零售,智慧交通等常见领域,通过基础学习、项目案例实践、社群答疑,三维立体的方式,打造最好的学习效果。

DirectX修复工具V4.0增强版

DirectX修复工具(DirectX Repair)是一款系统级工具软件,简便易用。本程序为绿色版,无需安装,可直接运行。 本程序的主要功能是检测当前系统的DirectX状态,如果发现异常则进行修复

期末考试评分标准的数学模型

大学期末考试与高中的考试存在很大的不同之处,大学的期末考试成绩是主要分为两个部分:平时成绩和期末考试成绩。平时成绩和期末考试成绩总分一般为一百分,然而平时成绩与期末考试成绩所占的比例不同会导致出现不同

Vue.js 2.0之全家桶系列视频课程

基于新的Vue.js 2.3版本, 目前新全的Vue.js教学视频,让你少走弯路,直达技术前沿! 1. 包含Vue.js全家桶(vue.js、vue-router、axios、vuex、vue-cli、webpack、ElementUI等) 2. 采用笔记+代码案例的形式讲解,通俗易懂

c语言项目开发实例

十个c语言案例 (1)贪吃蛇 (2)五子棋游戏 (3)电话薄管理系统 (4)计算器 (5)万年历 (6)电子表 (7)客户端和服务器通信 (8)潜艇大战游戏 (9)鼠标器程序 (10)手机通讯录系统

相关热词 c# dbml文件 修改 c#遍历tree c# 能够控制单片机 c#对象写入数据库 c# 添加activex c#2005 json c# 数据库在云端 c# 字符串移位加密 c#禁用滚轮 c#实体类list去重复
立即提问