3

PDFファイルをにアップロードでき、solrそれらのファイルを検索できます。しかし、インデックス作成とはsolr何ですか? PDF ファイルをアップロードすると、インデックスはどのように作成されますか?

これは、pdfファイルをアップロードするために使用するコードです

ContentStreamUpdateRequest up 
            = new ContentStreamUpdateRequest("/update/extract");

            up.addFile(fileName);

            up.setParam("literal.id", solrId);
            up.setParam("literal.first_name", "apachesolr");
            up.setParam("literal.last_name", "cookbook");
            up.setParam("literal.age", "30");

            up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);

            solrServer.request(up);

下は私のschema.xml

    <field name="first_name" type="string" indexed="true" stored="true" required="true"/>

<field name="last_name" type="string" indexed="true" stored="true" required="true"/>
<field name="age" type="int" indexed="true" stored="true" required="true"/>

<field name="created_at" type="date" indexed="true" stored="true"/>
<field name="updated_at" type="date" indexed="true" stored="true"/>
<field name="id" type="string" indexed="true" stored="true" required="true"/>

PDFのコンテンツを検索しているとき。結果は次のようになります

  SolrDocument[{
last_modified=Fri Oct 17 08:17:38 IST 2003, 
author=Mark Roth, Eduardo Pelegri-Llopart, 
title=[JSP 2.0 Specification, Final Release], 
content_type=[application/pdf], 
keywords=JSP, 
age=30, 
last_name=cookbook, 
first_name=apachesolr, 
id=jsp-2_0-fr-spec.pdf
}]

タイトル、著者、キーワードなどを取得するにはどうすればよいですか?

4

1 に答える 1

4

検索エンジンにおけるドキュメントの概念を誤解しています。ドキュメントは、対応する値を持つ一連の名前付きフィールドです。各フィールドは常に明示的に設定する必要があります。まず、Solrj で次のコードを試してください。

CommonsHttpSolrServer solr = new CommonsHttpSolrServer("http://localhost:8983/solr");
for(int i = 0; i < 1000; ++i) {
  SolrInputDocument doc = new SolrInputDocument();
  doc.addField("title", "My Favorite book");
  doc.addField("author", "Kevin");
  doc.addField("content", "Bla bla bla");
  solr.add(doc);
}
solr.commit(); 

このコードは、新しいフィールドを作成しSolrInputDocument、「タイトル」、「作成者」、および「コンテンツ」の 3 つのフィールドを追加します (注: これらのフィールドはすべて、Solr にこれらのフィールドのインデックス付けと保存の方法を知らせるために、schema.xml で定義する必要があります)。新しいドキュメントをトランザクション ( ) に追加しsolr.add(doc)、最後に変更をコミットします。これは、Solr を使用する基本的な方法です。

この通常の流れでは、ドキュメントから自分でテキストを抽出する必要があります。たとえば、この目的でTikaを使用できます。これは、最も柔軟で粒度の細かい方法です。

あなたがしようとしているのは、Solr の新しい機能であるコンテンツ抽出を使用することです。私が正しく理解していれば、setParams()間違ったフィールドを設定しようとしています。setParams()リクエスト パラメータのみを設定し、それを URL パラメータに変換して、Solrにリクエスト自体の処理方法を知らせます。私の知る限り、この方法ではフィールドを自分で設定することはできません。代わりに、/update/extractハンドラーはファイルの MIME タイプによってコンテンツを抽出し、ドキュメント属性に関するヒントを見つけてフィールドとして使用しようとします(Solr は Tika ライブラリを使用してドキュメント コンテンツを抽出することに注意してください)。したがって、本当にハンドラーを使用したい場合は、変更せずにこの例/update/extractに従ってみてください リクエスト パラメータに対応する行を確認し、どのフィールドが生成されたかを確認します。

于 2012-10-03T17:39:53.833 に答える