我正在努力学习和理解lucene是如何工作的,lucene索引里面是什么。基本上我想看看lucene索引里面的数据是如何表示的?
我使用lucene-core 8.6.0
作为依赖项
下面是我的基本Lucene代码
private Document create(File file) throws IOException {
Document document = new Document();
Field field = new Field("contents", new FileReader(file), TextField.TYPE_NOT_STORED);
Field fieldPath = new Field("path", file.getAbsolutePath(), TextField.TYPE_STORED);
Field fieldName = new Field("name", file.getName(), TextField.TYPE_STORED);
document.add(field);
document.add(fieldPath);
document.add(fieldName);
//Create analyzer
Analyzer analyzer = new StandardAnalyzer();
//Create IndexWriter pass the analyzer
Path indexPath = Files.createTempDirectory("tempIndex");
Directory directory = FSDirectory.open(indexPath);
IndexWriterConfig indexWriterCOnfig = new IndexWriterConfig(analyzer);
IndexWriter iwriter = new IndexWriter(directory, indexWriterCOnfig);
iwriter.addDocument(document);
iwriter.close();
return document;
}
注意:我了解Lucene背后的知识-倒排索引,但我缺乏对Lucene库使用这个概念以及如何创建文件的了解,以便使用Lucene使搜索变得容易和可行。
我试过Limo,但是没有用。它就是不起作用,即使我在webiderxml中给出了索引位置
2条答案
按热度按时间b4lqfgs41#
如果你想看一个很好的介绍性代码示例,使用当前版本的Lucene(建立一个索引,然后使用它),你可以从basic demo开始。
如果您想浏览您的索引数据,一旦创建了索引数据,您可以使用Luke。如果您以前没有使用过它:要运行Luke,您需要从main download page下载一个 binary 发行版。解压缩文件,然后导航到
luke
目录。然后运行相关脚本(luke.bat
或luke.sh
)。(The我能找到的
LIMO
工具的唯一版本是this one on Sourceforge。鉴于它是2007年的,几乎可以肯定它不再与最新的Lucene索引文件兼容。也许在某个地方有一个更新的版本。)如果您想要一个典型Lucene索引中的文件概述,您可以从这里开始。
许多具体问题可以通过查看API documentation中的相关包和类来回答。
就我个人而言,我还发现Solr和ElasticSearch文档对于解释特定的概念非常有用,这些概念通常与Lucene直接相关。
除此之外,我并不太担心Lucene如何管理其内部索引数据结构,相反,我关注的是可以用来访问这些数据的不同类型的分析器和查询。
更新:简单文本编解码器
现在已经过去了几个月,但这里还有一种方法可以探索Lucene的索引数据:标准的Lucene编解码器(如何将数据写入索引文件并从中读取数据)使用二进制格式--因此不是人类可读的。
但是,如果您将编解码器更改为
SimpleTextCodec
,Lucene将创建纯文本索引文件,您可以在其中更清楚地看到结构。要使用编解码器,首先需要包括相关依赖项-例如,如下所示:
现在,您可以按如下方式使用这个新的编解码器:
例如:
现在,您可以在文本阅读器(如Notepad++)中检查生成的索引文件。
在我的例子中,索引数据产生了几个文件--但我在这里感兴趣的是我的
*.scf
文件--一个“复合”文件,包含各种“虚拟文件”部分,其中存储了人类可读的索引数据。lstz6jyr2#
如果索引很大(例如数百GB),Luke有时会无法打开它。有一个基于命令行的Luke替代方案,称为
I-Rex
。它是为信息检索研究而开发的。以下是它的链接:https://github.com/souravsaha/I-REX/tree/shell-lucene8请随意添加/编辑代码。