java - 如何使用 Solr 索引 pdf 内容?

标签 java solr solr-cell

我正在尝试使用 SolrJ 索引一些 pdf 文档,如 http://wiki.apache.org/solr/ContentStreamUpdateRequestExample 中所述,下面是代码:

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());
  }
}

不幸的是,在查询 *:* 时,我得到了索引文档列表,但内容字段为空。我怎样才能更改上面的代码以提取文档的内容?

下面是描述 this document 的 xml 框架:

<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 字段始终为空。

最佳答案

在 schema.xml 文件中,你是否在内容字段中设置了“stored=true”,这是我的 schema.xml 文件的一个例子,我用它来存储 pdf 和其他二进制文件的内容。

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

对你有帮助吗?

赫克托

关于java - 如何使用 Solr 索引 pdf 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5693671/

相关文章:

java - 如何使用 java lambda 获取子元素以放入 Map<Long, List<Long>>?

java - Spring 启动: @Autowired remember and save the same object also for the next request

java - 我正在使用 Spring-Boot,使用类名字符串动态初始化类并获取返回值

pdf - 在solr中获取pdf搜索结果的页码

solr - 导入丰富的文档时,SOLR 是否有最佳实践 schema.xml?

java - RandomStringUtils.randomAlphanumeric(30) 是有效的 GUID 策略吗?

linux - 在 TomCat 6.x 上启动 Apache Solr 4.x 时出错 : java.net.UnknownHostException: hostname: hostname: Name or service not known

solr - solr查询中的子字符串匹配

search - Solr 搜索不返回精确匹配

Solr ExtractingRequestHandler 在链接中提取 "rect"