2

http://wiki.apache.org/solr/ContentStreamUpdateRequestExampleで説明されているように、SolrJ を使用していくつかの pdf ドキュメントのインデックスを作成しようとしています。以下にコードがあります。

import static org.apache.solr.handler.extraction.ExtractingParams.LITERALS_PREFIX;
import static org.apache.solr.handler.extraction.ExtractingParams.MAP_PREFIX;
import static org.apache.solr.handler.extraction.ExtractingParams.UNKNOWN_FIELD_PREFIX;

import org.apache.solr.client.solrj.SolrServer;
import org.apache.solr.client.solrj.SolrServerException;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.request.AbstractUpdateRequest;
import org.apache.solr.client.solrj.request.ContentStreamUpdateRequest;
import org.apache.solr.common.util.NamedList;
...
public static void indexFilesSolrCell(String fileName) throws IOException, SolrServerException {

  String urlString = "http://localhost:8080/solr"; 
  SolrServer server = new CommonsHttpSolrServer(urlString);

  ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
  up.addFile(new File(fileName));
  String id = fileName.substring(fileName.lastIndexOf('/')+1);
  System.out.println(id);

  up.setParam(LITERALS_PREFIX + "id", id);
  up.setParam(LITERALS_PREFIX + "location", fileName); // this field doesn't exists in schema.xml, it'll be created as attr_location
  up.setParam(UNKNOWN_FIELD_PREFIX, "attr_");
  up.setParam(MAP_PREFIX + "content", "attr_content");
  up.setAction(AbstractUpdateRequest.ACTION.COMMIT, true, true);

  NamedList<Object> request = server.request(up);
  for(Entry<String, Object> entry : request){
    System.out.println(entry.getKey());
    System.out.println(entry.getValue());
  }
}

残念ながら、*:* のクエリを実行すると、インデックス付きドキュメントのリストが取得されますが、コンテンツ フィールドは空です。上記のコードを変更して、ドキュメントのコンテンツも抽出するにはどうすればよいですか?

以下は、このドキュメントを説明する xml frament です。

<doc>
  <arr name="attr_content">
    <str>            </str>
  </arr>
  <arr name="attr_location">
    <str>/home/alex/Documents/lsp.pdf</str>
  </arr>
  <arr name="attr_meta">
    <str>stream_size</str>
    <str>31203</str>
    <str>Content-Type</str>
    <str>application/pdf</str>
  </arr>
  <arr name="attr_stream_size">
    <str>31203</str>
  </arr>
  <arr name="content_type">
    <str>application/pdf</str>
  </arr>
  <str name="id">lsp.pdf</str>
</doc>

この問題は Apache Tika の不適切なインストールに関連しているとは思いません。以前はいくつかの ServerException が発生していましたが、必要な jar を正しいパスにインストールしたからです。さらに、同じクラスを使用して txt ファイルのインデックスを作成しようとしましたが、attr_contentフィールドは常に空です。

4

1 に答える 1

1

schema.xml ファイルで、content フィールドに「stored= true」を設定しましたか。私の schema.xml ファイルの例で、pdf やその他のバイナリ ファイルのコンテンツを格納するために使用しています。

<field name="text" type="textgen" indexed="true" stored="true" required="false" multiValued="true"/>

役に立ちましたか?

ヘクター

于 2011-04-25T12:58:51.267 に答える