知识点
相关文章
更多最近更新
更多Lucene学习笔记之十一:IndexReader设计成单例
2019-03-10 19:02|来源: 领悟书生
定义一个静态的IndexReader成员变量reader,然后在构造方法中初始化
public class IndexUtil { private static IndexReader reader = null;//一般都是单例的 public IndexUtil() { try { reader = IndexReader.open(directory); } catch (IOException e) { e.printStackTrace(); } } } |
获取的时候,用IndexReader.openIfChanged方法判断reader的状态是否变化,如果有变化,就把之前的关闭,重新打开一个
public void search02() { try { IndexSearcher searcher = getSearcher(); TermQuery query = new TermQuery(new Term("content","like")); TopDocs tds = searcher.search(query, 10); for(ScoreDoc sd:tds.scoreDocs) { Document doc = searcher.doc(sd.doc); System.out.println(doc.get("id") } searcher.close(); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public IndexSearcher getSearcher() { try { if(reader==null) { reader = IndexReader.open(directory); } else { IndexReader tr = IndexReader.openIfChanged(reader); if(tr!=null) { reader.close(); reader = tr; } } return new IndexSearcher(reader); } catch (CorruptIndexException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return null; } |
本文链接:Lucene学习笔记之十一:IndexReader设计成单例,领悟书生学习笔记,转载请注明出处:http://www.656463.com/article/448
相关问答
更多-
lucene怎么用[2022-07-03]
Lucene是一个全文检索系统框架,开源的。 用起来比较方便,去Lucene的官网上下一个包并导入到你的工程中就可以调用包里面的类了。 一般的书里面介绍的版本都是1.4.3或者稍微高级一点的,不过现在lucene3.0正式发布,一些函数调用方法已经改变了,你可以下载一个版本低一点的Lucene比较适合学习~ 当然你直接从3.0入手的话网上资料也是非常丰富的~ -
将一个类设计成单例设计模式,需要哪些步骤[2019-06-02]
单例模式(Singleton Pattern)是一个比较简单的模式。 定义: 确保某一个类只有一个实例,而且自动实例化并向整个系统提供这个实例。 通用类图: 通用代码: Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的。 /** * 线程安全的单例模式 * 饿汉式单例 * @author Administrator * */ public class Singleton { private static final Singleton si ... -
Lucene具体作用...是否有学习资料[2023-07-15]
基于Java的全文检索引擎. 参考资料: Apache: Lucene Project http://jakarta.apache.org/lucene/ Lucene开发/用户邮件列表归档 Lucene-dev@jakarta.apache.org Lucene-user@jakarta.apache.org The Lucene search engine: Powerful, flexible, and free http://www.javaworld.com/javaworld/jw-09-200 ... -
lucene indexreader的打开是不是很耗性能[2022-03-25]
很多人会抱怨 Lucene 在数据量增加到一定规模的时候,性能会出现明显下降,对于并发用户访问的支持能力也比较弱。其实在工程师所遇到的绝大多数环境下 Lucene 的性能问题,往往是因为系统没有经过良好的调优。而非简单的 Lucene 设计缺陷所造成。 当前使用 Lucene 的知名网站包括,Stack Exchange,旗下全球最大的事实性问答网站 StackOverFlow.com . 基于Lucene 文档 逗How to make indexing faster地,我们可以看到如下经验可能可以应用于 ... -
看看NRTManager和SearcherManager。 你真的不必自己处理这个问题。 Look at NRTManager and SearcherManager. You really don't have to handle this yourself.
-
通过lucene中的IndexReader或IndexSearcher?打开目录(opening directory through IndexReader or IndexSearcher?in lucene)[2022-07-26]
IndexSearcher是一个围绕IndexReader的轻量级包装器。 即使您使用IndexSearcher构造函数, IndexReader也会在引擎盖下打开 ,因此您可以从两个片段中获得相同的性能。 尽管它很方便,但通过目录直接打开IndexSearcher是一种不好的做法。 此外,自Lucene 3.5以来,这个构造函数已被弃用。 IndexSearcher is a lightweight wrapper around an IndexReader. Even if you use the In ... -
听起来你已经掌握了如何获得TermsEnum,所以从那里,只需使用seekCeil寻找你想要匹配的前缀,然后遍历TermsEnum,直到找到一个与前缀不匹配的前缀。 例如: Terms terms = MultiFields.getTerms(indexReader, "text"); TermsEnum termsEnum = terms.iterator(); List
matchingTerms = new ArrayList (); termsEnum.seekCeil(new ... -
首先,您必须获取IndexReader的文档并迭代它们按标签搜索,然后使用每个标签的值进行搜索。 First you have to get IndexReader's documents and iterate them searching by label and then search using the value of every label.
-
这是适用于Lucene 6.4的代码。 它在所有字段中找到最常用的术语,用于分别在字段中查找最常用的术语调整代码。 IndexReader reader = DirectoryReader.open(dir); final Fields fields = MultiFields.getFields(reader); final Iterator
iterator = fields.iterator(); long maxFre ... -
根据当前用于Lucene 6.4.2的IndexReader JavaDoc ,您应该使用DirectoryReader.open 。 According to current IndexReader JavaDoc for Lucene 6.4.2 you should use DirectoryReader.open.