- 浏览: 278500 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (161)
- 【**计划】 (2)
- 【**Core Java**】 (30)
- 【**JAVA EE】 (6)
- JDBC (3)
- Hibernate专题系列 (0)
- 【**OS】 (14)
- 【**架构设计/设计模式】 (11)
- 【Hadoop】 (3)
- 【**分布式】 (9)
- 模板 (1)
- C (2)
- 常用工具 (1)
- Oracle (2)
- 【Tips】 (3)
- 【数据库】 (2)
- 玩转Ubuntu (0)
- 【计算机网络/网络编程】 (7)
- 【**Search Engine】 (21)
- 【**专题**】 (6)
- 【**Python】 (10)
- XML (1)
- 【**Open Source Framework】 (1)
- 【高级主题】 (1)
- 【存储】 (3)
- 【笔试面试】 (2)
- 【**数据结构与算法设计】 (20)
- 【其他】 (3)
- 【编程练习】 (2)
- 【待完成】 (12)
- 【工作】 (6)
- 【软件研发】 (4)
- 【**多线程多进程编程】 (5)
- 【Web Service】 (1)
- 【表达式解析/JavaCC系列】 (5)
- 【缓存系统:Memcached】 (1)
- 【Java IO/NIO】 (5)
- 【JVM运行机制及内存管理】 (7)
最新评论
-
107x:
...
python list排序 -
yuzhu223:
...
【Python基础】Python的lambda函数与排序 -
Tonyguxu:
分析查询结果的打分小于11.query=1065800715* ...
lucene打分机制的研究 -
Tonyguxu:
query=139320661963.013709 = (MA ...
lucene打分机制的研究 -
Tonyguxu:
query=10658007150.6772446 = (MA ...
lucene打分机制的研究
源码中涉及以下知识点:
1.java.security.MessageDigest
2.org.apache.lucene.store.LockFactory
org.apache.lucene.store.FSLockFactory
见FSDirectory构造
3.32bit与64bit操作系统
4.sync中RandomAccessFile、FileDescriptor
5.getLockId中位运算
相比父类Directory
新增方法1:static open()
因为SUN的JRE长期在WIN平台上存在问题,所以使用NIOFSDirectory性能会较差,这样需要根据不同平台来选择合理的
FSDirectory,静态方法open提供了一种简化的方法来创建平台合适的FSDirectory实例,免除了开发者自己进行平台判断。
public static FSDirectory open(File path) throws IOException { return open(path, null); } public static FSDirectory open(File path, LockFactory lockFactory) throws IOException { if (Constants.WINDOWS) { return new SimpleFSDirectory(path, lockFactory); } else { return new NIOFSDirectory(path, lockFactory); } }
覆盖方法1:sync()
在父类abstract Directory声明如下:
/** Ensure that any writes to this file are moved to * stable storage. Lucene uses this to properly commit * changes to the index, to prevent a machine/OS crash * from corrupting the index. */ public void sync(String name) throws IOException {}
子类abstract FSDirectory进行了override
@Override
public void sync(String name) throws IOException {
ensureOpen();
File fullFile = new File(directory, name);
boolean success = false;
int retryCount = 0;
IOException exc = null;
while(!success && retryCount < 5) {
retryCount++;
RandomAccessFile file = null;
try {
try {
file = new RandomAccessFile(fullFile, "rw");
file.getFD().sync();
success = true;
} finally {
if (file != null)
file.close();
}
} catch (IOException ioe) {
if (exc == null)
exc = ioe;
try {
// Pause 5 msec
Thread.sleep(5);
} catch (InterruptedException ie) {
throw new ThreadInterruptedException(ie);
}
}
}
if (!success)
// Throw original exception
throw exc;
}
覆盖方法2:getLockID()
在父类abstract Directory声明如下:
/** * Return a string identifier that uniquely differentiates * this Directory instance from other Directory instances. * This ID should be the same if two Directory instances * (even in different JVMs and/or on different machines) * are considered "the same index". This is how locking * "scopes" to the right index. */ public String getLockID() { return this.toString(); } @Override public String toString() { return super.toString() + " lockFactory=" + getLockFactory(); }
子类abstract FSDirectory进行了override
@Override public String getLockID() { ensureOpen(); String dirName; // name to be hashed try { dirName = directory.getCanonicalPath(); } catch (IOException e) { throw new RuntimeException(e.toString(), e); } byte digest[]; synchronized (DIGESTER) { digest = DIGESTER.digest(dirName.getBytes()); } StringBuilder buf = new StringBuilder(); buf.append("lucene-"); for (int i = 0; i < digest.length; i++) { int b = digest[i]; buf.append(HEX_DIGITS[(b >> 4) & 0xf]); buf.append(HEX_DIGITS[b & 0xf]); } return buf.toString(); }
发表评论
-
【Lucene】建索引核心类介绍
2012-06-08 17:28 1063IndexWriter 负责创建新索引或打开已有索引, ... -
优秀文章汇总
2012-05-08 18:48 772搜索引擎技术之概要预览 http://blog.csd ... -
【Lucene】lucene查询Query对象
2012-05-08 18:41 1417PrefixQuery 前缀查询。 如 test* 会匹配 ... -
【工作】日志检索结果的排序改进分析
2012-04-27 18:07 963下图是现在生产环境的部署图,索引文件分布在70-7 ... -
【Lucene】查询term后加上'*'对打分的影响
2012-04-25 18:14 2096BooleanWeight里sum ... -
lucene.search.Weight
2012-04-25 15:39 995org.apache.lucene.search Cl ... -
lucene.search.Similarity
2012-04-20 10:31 2554Similarity defines the componen ... -
lucene打分机制的研究
2012-04-22 17:46 5861提出问题 目前在查询时,会将得分小于1的查询结果过滤掉。 ... -
tokenize和tokenizer到底怎么翻译?
2012-03-28 10:32 3577在编写词法分析器(Lexer)或语法分析器(Parse ... -
【Lucene】更合理地使用Document和Field
2012-03-27 09:39 5442writer = ...; //#1 Prepared ... -
【Lucene】构建索引
2012-03-17 23:16 762Lucene索引的过程是什么? step1 收集待 ... -
信息检索类小程序
2012-03-17 00:37 8481.对四大名著txt实现索引和搜索功能 2. -
【Lucene】Scoring
2012-03-13 23:47 1169http://lucene.apache.org/core/o ... -
Information Retrieval
2012-03-13 22:50 1003http://wiki.apache.org/lucene-j ... -
【Lucene】lucene的评分机制
2012-03-07 16:24 951测试环境里查询条件1065800714,为什么Score ... -
【Lucene】搜索的核心类简介
2012-03-05 18:48 1386注:Lucene版本为3.4 I ... -
【Lucene】How to make indexing faster
2012-02-16 14:54 838http://wiki.apache.org/lucene-j ... -
【Lucene】index包IndexWriter
2011-12-25 01:50 803Q1:IndexWriter作用是什么? Q2:索引过 ... -
【Lucene】store包SimpleFSDirectory
2011-12-24 23:43 806store包SimpleFSDirectory -
【Lucene】store包Directory
2011-12-11 17:23 1321说明 lucene的版本是3.0.3 结构及类图 文件类 ...
相关推荐
5. **Lucene-Store**: 包含用于存储和读取索引的不同策略,如RAMDirectory、FSDirectory等。 6. **Lucene-Util**: 提供了一系列实用工具类,如BitSet、FieldInfos、IndexInput和IndexOutput等。 7. **Lucene-Codec...
org.apache.lucene.store.Directory public abstract class Analyzer org.apache.lucene.analysis.Analyzer public final class Document org.apache.lucene.document.Document public final class Field org....
import org.apache.lucene.store.FSDirectory; import java.nio.file.Paths; public class IndexingExample { public static void main(String[] args) throws Exception { Directory directory = FSDirectory....
2. 集成IK分词器:在Lucene中集成IK,首先需要将IKAnalyzer的jar包添加到项目的类路径中。然后,在创建Analyzer时,使用IKAnalyzer类替换默认的Analyzer,这样在索引和搜索过程中就会使用IK进行分词。 三、使用步骤...
Directory directory = FSDirectory.open(Paths.get("index_dir")); IndexWriterConfig config = new IndexWriterConfig(analyzer); IndexWriter writer = new IndexWriter(directory, config); Document doc = new...
import org.apache.lucene.store.FSDirectory; public class Indexer { public static void main(String[] args) throws Exception { Directory directory = FSDirectory.open(Paths.get("index_dir")); // 指定...
开源全文搜索工具包Lucene2.9.1的使用。 1. 搭建Lucene的开发环境:在classpath中添加lucene-core-2.9.1.jar包 2. 全文搜索的两个工作: 建立索引文件,搜索索引. 3. Lucene的索引文件逻辑结构 1) 索引(Index)由...
1. 初始化:首先,你需要创建一个Directory对象来指向存储索引的物理位置,如RAMDirectory或FSDirectory。 2. 创建索引:使用IndexWriter添加文档到索引。每个文档实例化为Document对象,然后添加多个字段。每个...
### Lucene 使用教程 ...通过本文介绍的基础操作,读者可以了解到如何创建和搜索索引,以及如何在项目中正确地配置Lucene的依赖包。对于更高级的功能和优化策略,建议进一步阅读Lucene的官方文档和其他相关资源。
可以通过NuGet包管理器安装`Lucene.Net`和`Lucene.Net.Analysis.Standard`等必要的包。 2. **创建索引**:索引是Lucene搜索的核心。我们需要定义一个Analyzer(分析器)来处理文本,如使用StandardAnalyzer进行英文...
doc.add(new TextField("content", "这是文档内容", Field.Store.YES)); writer.addDocument(doc); writer.commit(); writer.close(); ``` 2. 搜索(Searching):创建一个索引Reader,然后基于Reader构建Searcher...
《Lucene2.9开发指南》是一份专为初级开发者准备的资料,旨在详细介绍如何使用开源全文搜索工具包Lucene2.9.1。Lucene作为一个强大的文本搜索库,其核心功能包括建立索引和执行搜索。以下是关于Lucene2.9开发的一些...
doc.add(new TextField("content", "这是一个关于Lucene的初级示例", Field.Store.YES)); ``` 4. **索引文档**:使用`addDocument()`方法将文档添加到索引。 ```java indexWriter.addDocument(doc); ``` 5. **...
doc.add(new TextField("content", "搜索内容", Field.Store.YES)); indexWriter.addDocument(doc); indexWriter.close(); // 搜索 IndexReader reader = DirectoryReader.open(FSDirectory.open(new File(indexDir...
3. **创建文档**:定义Document对象,添加Field,如`doc.add(new TextField("content", "文本内容", Store.YES))`。 4. **添加文档到索引**:使用`indexWriter.addDocument(doc)`将文档写入索引。 5. **关闭...
**Lucene索引的基本操作** Lucene是一款由Apache软件基金会开发的全文检索库,它提供了高效、可扩展的全文检索功能。在Java开发环境中,Lucene是广泛使用的文本搜索工具,能够帮助开发者构建复杂的搜索引擎。本文将...
var directory = FSDirectory.Open(new DirectoryInfo("index_directory")); using (var indexWriter = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED)) { // 添加文档到索引...
3. **Directory**:存储索引的地方,Lucene提供两种类型的Directory,FSDirectory用于磁盘存储,RAMDirectory用于内存存储,前者是更常见的选择,但在某些情况下,内存索引可以提高性能。 4. **Analyzer**:负责对...
首先,我们导入必要的包,包括`java.io`用于文件读写,`org.apache.lucene`是Lucene的核心包,包含了创建索引、查询等所需的所有类。特别地,我们引入了`IKAnalyzer`,这是一个基于Lucene的中文分词器,它能够有效地...