我正在尝试在 Lucene 中调试索引文档,并且我需要查看索引的内容,以便准确了解文档是如何被索引的。据称卢克这样做了,但是没有任何文档,当我将它指向索引目录时(在其中任何一个,虽然我不知道为什么它无法自行判断哪个是正确的) ,我什么都得不到。当然有一些简单的方法可以做到这一点?
4 回答
我对 Luke 了解不多,但我与 Lucene 合作过很多次。即使使用 Luke,查看索引的内容也可能很棘手,因为您只能查看存储字段的数据。
对于我所做的最后一个 Lucene 项目(实际上是 Solr),我几乎将每个字段都标记为索引但未存储。对于这些情况,为了测试文档是否有正确的索引词,我会在索引中查询具有给定主键和预期词的文档。如果匹配,那么我知道它用该术语对其进行了索引。
例如,要查看产品 5 是否为英文,我会说 productId:5 和 lang:en
我知道这并不能直接回答你关于如何使用 Luke 的问题,但如果 Luke 不能帮助你,这可能是一个替代方案。
当您使用“文档”选项卡中的“重建和编辑”按钮时,Luke 会尝试显示已编入索引但未存储的字段中的值。如果我没记错的话,停用词不会出现在“重建和编辑”显示中——您会看到“null_1”、“null_2”等内容。
可以在将 Elastic 搜索格式添加到 Luke MetaINF/services 的同时从源代码编译 luke。
只需遵循这种方法
这也可以用于使用 LUcene 测试自定义发布格式/编解码器
ElasticSearch 使用自定义的张贴格式(张贴格式定义了倒排索引如何在内存/磁盘上表示),Luke 对此一无所知。要告诉 Luke ES 发布格式,请按照以下步骤添加 SPI 类。
- 克隆 Luke 源代码库:
2.在 Luke 项目的 pom 文件中添加你需要的 ElasticSearch 版本的依赖:
<!-- 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 目标/luke-with-deps.jar -C tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat
运行卢克
$./luke.sh