【问题标题】:Show contents of Lucene index显示 Lucene 索引的内容
【发布时间】:2012-12-19 11:31:09
【问题描述】:

我正在尝试在 Lucene 中调试索引文档,我需要查看索引的内容,以便准确了解文档是如何被索引的。据称卢克这样做了,但没有任何文档,当我将它指向索引目录时(在其中任何一个,虽然我不知道为什么它无法自行判断哪个是正确的) ,我什么都得不到。当然有一些简单的方法可以做到这一点?

【问题讨论】:

  • 好的,经过几天的咀嚼,据我所知,这实际上是 Elasticsearch 包装 Lucene 是为什么 Luke 无法读取索引,显然只是平坦无法显示索引的内容。无赖。
  • 不,ES 使用普通的 Lucene 索引……你一定是版本不对。下载这些以获得当前版本:github.com/DmitryKey/luke/releases

标签: lucene luke


【解决方案1】:

卢克是做到这一点的简单方法。您运行它,浏览到索引,然后开始比赛。再简单不过了。 This blog post 逐步介绍了一些 Luke 的功能,也许它会帮助你开始使用它。

还有其他工具,例如 LIMO 也是一个很好的工具,但它比 Luke 更难入门。

也许如果您详细说明您在 Luke 遇到的问题,您将能够获得一些帮助。

【讨论】:

  • 真的没什么可说的了 1) 我知道有数据被索引了,因为搜索结果回来了; 2)有四个不同的索引目录(我不知道是什么原因),我试过指向它们; 3) Luke 在这些目录中没有显示任何记录。现在,这是 Lucene 的 Elasticsearch 包装器,所以我想它可能会将数据填充到我不看的某个疯狂的地方,但我假设这不是由邪恶的侏儒编写的......
  • 我相信 ElasticSearch 中的索引目录是按照configuration docs 配置的,在data: /var/data/elasticsearch 之类的条目中。是你看过的地方吗?
  • AFAIK,Luke 不再支持最新版本的 Lucene...还有其他工具可以完成这项任务吗?
  • @pierocy - 好吧,我还没有尝试确定,但我相信luke-5.2.0 应该在 Lucene 5.2.0 上运行良好。就 5.3.0 而言,它仅在一周前发布。如果需要进行更改以支持它,则可能会有一些滞后时间。
  • 来自https://github.com/DmitryKey/luke/ 的Luke 确实支持最新的Lucene(现在是7.2.x)。
【解决方案2】:

我对 Luke 了解不多,但我与 Lucene 合作过很多次。即使使用 Luke,查看索引的内容可能也很棘手,因为您只能查看存储字段的数据。

对于我所做的最后一个 Lucene 项目(实际上是 Solr),我几乎将每个字段都标记为索引但未存储。对于这些情况,为了测试文档是否有正确的索引词,我会在索引中查询具有给定主键和预期词的文档。如果匹配,那么我知道它使用该术语对其进行了索引。

例如,要查看产品 5 是否为英文,我会说 productId:5 和 lang:en

我知道这并不能直接回答您关于如何使用 Luke 的问题,但如果 Luke 无法帮助您,这可能是一个替代方案。

【讨论】:

  • 我会记住这一点,以防以后有帮助,尽管不幸的是在这种情况下它不是很有用。不过还是谢谢。
【解决方案3】:

当您使用“文档”选项卡中的“重建和编辑”按钮时,Luke 会尝试显示已编入索引但未存储的字段中的值。如果我没记错的话,停用词不会出现在“重建和编辑”显示中——您会看到“null_1”、“null_2”等内容。

【讨论】:

    【解决方案4】:

    可以在将 Elastic 搜索格式添加到 Luke MetaINF/services 的同时从源代码编译 luke。

    按照这个方法就行了

    Using Luke with ElasticSearch

    这也可以用于使用 LUcene 测试自定义发布格式/编解码器

    ElasticSearch 使用自定义的发布格式(发布格式定义了倒排索引在内存/磁盘中的表示方式),Luke 对此一无所知。要告诉 Luke ES 发帖格式,请按照以下步骤添加 SPI 类。

    1. 克隆 Luke 源代码库:

    2.将所需版本的 ElasticSearch 的依赖添加到 Luke 项目的 pom 文件中:

    <!-- ElasticSearch -->
    <dependency>
        <groupId>org.elasticsearch</groupId>
        <artifactId>elasticsearch</artifactId>
        <version>1.1.1</version>
    </dependency>
    
    1. 编译 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
    
    1. 将 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

    2. 将修改后的文件重新打包到jar中:

      $ jar -uf target/luke-with-deps.jar -C tmp/META-INF/services/org.apache.lucene.codecs.PostingsFormat

    3. 运行卢克

      $./luke.sh

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多