我正在尝试在 Lucene 中调试索引文档,我需要查看索引的内容,以便我可以准确地看到文档是如何被索引的。据称卢克这样做了,但没有任何相关文档,当我将其指向索引目录时(在其中任何一个目录中,尽管我不知道为什么它无法弄清楚哪个目录是正确的) ,我什么也没得到。当然有一些简单的方法可以做到这一点吗?
路加福音是最简单的方法。您运行它,浏览到索引,然后就可以开始比赛了。再简单不过了。
还有其他工具,例如LIMO也是一个不错的工具,但它比 Luke 更难上手。
也许如果您向 Luke 提供有关您遇到的问题的一些详细信息,您将能够获得一些帮助。
我对Luke了解不多,但我和Lucene合作过很多次。即使使用 Luke,要查看索引的内容也可能很棘手,因为您只能看到存储字段的数据。
对于我做的最后一个 Lucene 项目(实际上是 Solr),我几乎将每个字段都标记为索引但未存储。对于这些情况,为了测试文档是否具有正确的索引术语,我将查询索引以查找具有给定主键和预期术语的文档。如果匹配,那么我知道它用该术语对其进行了索引。
例如,要查看产品 5 是否是英文,我会说 产品 ID:5 和语言:en
我知道这并不能直接回答你关于如何使用 Luke 的问题,但如果 Luke 无法帮助你,这可能是一个替代方案。
当您使用“文档”选项卡中的“重建和编辑”按钮时,Luke 尝试显示已索引但未存储的字段中的值。如果我没记错的话,停用词不会出现在“重建和编辑”显示中 - 您会看到“null_1”、“null_2”等内容。
可以从源代码编译 luke,同时将 Elastic 搜索格式添加到 Luke MetaINF/services 中。
只要遵循这个方法即可
这也可以用来使用 LUcene 测试自定义发布格式/编解码器
ElasticSearch 使用自定义的倒排格式(倒排格式定义了倒排索引在内存/磁盘上的表示方式),而 Luke 并不知道。要告诉 Luke 有关 ES 发布格式的信息,请按照以下步骤添加 SPI 类。
2.将您所需的 ElasticSearch 版本的依赖项添加到 Luke 项目的 pom 文件中:
<!-- ElasticSearch -->
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>1.1.1</version>
</dependency>
编译 Luke jar 文件(创建 target/luke-with-deps.jar):
$ mvn 包
4.将 Luke 的已知帖子格式列表解压到临时文件:
$ unzip target/luke-with-deps.jar META-INF/services/org.apache.lucene.codecs.PostingsFormat -d ./tmp/
Archive: target/luke-with-deps.jar
inflating: ./tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat
将 ElasticSearch 发布格式添加到临时文件中:
$ echo "org.elasticsearch.index.codec.postingsformat.BloomFilterPostingsFormat"
./tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat $ echo“org.elasticsearch.index.codec.postingsformat.Elasticsearch090PostingsFormat” ./tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat $ echo "org.elasticsearch.search.suggest.completion.Completion090PostingsFormat" ./tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat
将修改后的文件重新打包回jar中:
$ jar -uf target/luke-with-deps.jar -C tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat
奔跑卢克
$./luke.sh