web-dev-qa-db-ja.com

Luceneインデックスの内容を表示する

Luceneでインデックス作成ドキュメントをデバッグしようとしていますが、ドキュメントがどのようにインデックス付けされたかを正確に確認できるように、インデックスの内容を確認する必要があります。伝えられるところでは、ルークはこれを行っていますが、それに関するドキュメントはまったくなく、インデックスディレクトリをポイントすると(それらのいずれかで、どれがそれ自体で正しいかわからないのはなぜかわかりませんが) 、何も得られません。確かにこれを行うためのいくつかの簡単な方法がありますか?

16
cbmanica

ルークIS簡単な方法です。実行してインデックスを参照し、レースに出かけます。これ以上簡単なことはありません。 このブログ投稿 いくつかのLuke機能を使用する手順を実行します。おそらく、それを使用するのに役立ちます。

[〜#〜] limo [〜#〜] のような他のツールもありますが、これには優れたツールですが、Lukeよりも始めるのが難しいです。

おそらく、ルークで直面している問題について詳細を説明すれば、それについていくらかの助けを得ることができるでしょう。

13
femtoRgon

Lukeについてはよくわかりませんが、Luceneとはたくさん仕事をしています。格納されたフィールドのデータしか表示できないため、Lukeを使用した場合でも、インデックス付けされているものを確認するのは難しい場合があります。

私が行った最後のLuceneプロジェクト(実際にはSolr)では、事実上すべてのフィールドがインデックス付きとしてマークされていましたが、保存されていませんでした。そのような場合、ドキュメントに正しいインデックス付きの用語があるかどうかをテストするために、指定された主キーと予想される用語を持つドキュメントのインデックスをクエリします。それが一致する場合、私はそれがその用語でそれを索引付けしたことを知っています。

たとえば、製品5が英語であるかどうかを確認するには、productId:5およびlang:enと言います。

これはルークの使い方についてのあなたの質問に直接答えるものではないことを私は知っていますが、ルークがあなたを助けることができない場合、これは代替手段かもしれません。

3
Brandon

ElasticsearchフォーマットをLukeMetaINF/servicesに追加しながら、ソースからlukeをコンパイルすることができます。

このアプローチに従うだけです

ElasticSearchでLukeを使用

これに従って、カスタム投稿フォーマット/コーデックをLUceneでテストすることもできます。

ElasticSearchはカスタム投稿フォーマットを使用し(投稿フォーマットは転置インデックスがメモリ/ディスク上でどのように表されるかを定義します)、Lukeはそれについて知りません。 LukeにES投稿形式について伝えるには、以下の手順に従ってSPIクラスを追加します。

  1. クローンルークソースリポジトリ:

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

1
Kewl_guy89

Lukeは、[ドキュメント]タブの[再構築と編集]ボタンを使用すると、インデックスが付けられているが保存されていないフィールドに値を表示しようとします。正しく思い出せば、ストップワードは「再構築と編集」画面に表示されません。「null_1」、「null_2」などが表示されます。