我是 solr 的新手。我在使用 ContentStreamUpdateRequest 在 solr 中为 pdf 文件添加字段/元数据时遇到问题。由于必须使用文字参数来添加字段,我尝试了以下操作:
public static void indexFilesSolrCell(String fileName,String solrId,int i,String name,String Category,String loc,String locat)
throws IOException, SolrServerException {
//...
ContentStreamUpdateRequest up = new ContentStreamUpdateRequest("/update/extract");
File f1 = new File(fileName);
up.addFile(new File(fileName));
up.setParam("literal.id",solrId);
up.setParam("literal.name",name );
up.setParam("literal.url_file", loc);
up.setParam("literal.location",locat);
up.setParam("literal.Category",Category);
//..
}
pdf 文件在 solr 中得到索引,但问题是并非所有字段都是使用文字创建的。已创建以下字段:
- id
- 姓名
类别。
虽然它不会创建像 url_file 或任何像 path 或 location 这样的字段。*有时*它不会创建字段 Category。
据我所知,任何随机字段都可以使用文字参数创建元数据。为什么像 id 或 name 或即使 blah_s 总是被创建,但是当我尝试像上面提到的那样的随机字段时,solr 不会创建?
我们是否也必须在其他任何地方声明这些随机字段?
非常感谢任何帮助。
更新:调用方法up.setParam("literal.myField") 修改schema.xml 来创建一个新的字段?
最佳答案
那是因为您使用的是 solr 示例,它不包含 url_file
和 location
字段。您可以在 example/solr/conf
下找到 schema.xml
。我建议您稍微清理一下,只保留您需要的字段,因为该架构包含很多您并不真正需要的字段。
创建 blah_s 字段是因为您使用的模式包含以下定义:
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
这是一个带有后缀_s
的动态字段,这意味着每个带有该后缀的字段将被Solr作为string
、indexed
和存储
。
要修改 schema.xml
,您需要在本地打开它并对 xml 文件进行更改,然后重新加载 Solr。请记住,在架构更改后,您需要重新编制索引,重新运行您粘贴在问题中的代码。
关于solr - 使用 solrj 向 pdf 文件添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9533917/