如何查看Lucene索引

2jcobegt  于 2022-11-07  发布在  Lucene
关注(0)|答案(2)|浏览(229)

我正在努力学习和理解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中给出了索引位置

b4lqfgs4

b4lqfgs41#

如果你想看一个很好的介绍性代码示例,使用当前版本的Lucene(建立一个索引,然后使用它),你可以从basic demo开始。
如果您想浏览您的索引数据,一旦创建了索引数据,您可以使用Luke。如果您以前没有使用过它:要运行Luke,您需要从main download page下载一个 binary 发行版。解压缩文件,然后导航到luke目录。然后运行相关脚本(luke.batluke.sh)。
(The我能找到的LIMO工具的唯一版本是this one on Sourceforge。鉴于它是2007年的,几乎可以肯定它不再与最新的Lucene索引文件兼容。也许在某个地方有一个更新的版本。)
如果您想要一个典型Lucene索引中的文件概述,您可以从这里开始。
许多具体问题可以通过查看API documentation中的相关包和类来回答。
就我个人而言,我还发现SolrElasticSearch文档对于解释特定的概念非常有用,这些概念通常与Lucene直接相关。
除此之外,我并不太担心Lucene如何管理其内部索引数据结构,相反,我关注的是可以用来访问这些数据的不同类型的分析器和查询。

更新:简单文本编解码器

现在已经过去了几个月,但这里还有一种方法可以探索Lucene的索引数据:标准的Lucene编解码器(如何将数据写入索引文件并从中读取数据)使用二进制格式--因此不是人类可读的。
但是,如果您将编解码器更改为SimpleTextCodec,Lucene将创建纯文本索引文件,您可以在其中更清楚地看到结构。

  • 此编解码器仅用于提供信息/教育,不应用于生产。*

要使用编解码器,首先需要包括相关依赖项-例如,如下所示:

<dependency>
    <groupId>org.apache.lucene</groupId>
    <artifactId>lucene-codecs</artifactId>
    <version>8.7.0</version>
</dependency>

现在,您可以按如下方式使用这个新的编解码器:

iwc.setCodec(new SimpleTextCodec());

例如:

final String indexPath = "/path/to/index_dir";
final String docsPath = "/path/to/inputs_dir";
final Path docDir = Paths.get(docsPath);
Directory dir = FSDirectory.open(Paths.get(indexPath));
Analyzer analyzer = new StandardAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
iwc.setOpenMode(OpenMode.CREATE);
iwc.setCodec(new SimpleTextCodec());
System.out.println(iwc.getCodec().getName());
try ( IndexWriter writer = new IndexWriter(dir, iwc)) {
    // read documents, and write index data:
    indexDocs(writer, docDir);
}

现在,您可以在文本阅读器(如Notepad++)中检查生成的索引文件。
在我的例子中,索引数据产生了几个文件--但我在这里感兴趣的是我的*.scf文件--一个“复合”文件,包含各种“虚拟文件”部分,其中存储了人类可读的索引数据。

lstz6jyr

lstz6jyr2#

如果索引很大(例如数百GB),Luke有时会无法打开它。有一个基于命令行的Luke替代方案,称为I-Rex。它是为信息检索研究而开发的。以下是它的链接:https://github.com/souravsaha/I-REX/tree/shell-lucene8
请随意添加/编辑代码。

相关问题