3

我是 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 中被索引,但问题是并非所有字段都是使用文字创建的。以下字段已创建:

  1. ID
  2. 姓名
  3. 类别

    虽然它不会创建像url_file或类似路径位置的任何字段。*有时* 它不会创建字段Category
    根据我所经历的,可以使用文字参数创建任何随机字段来创建元数据。为什么总是创建像idname甚至blah_s这样的字段但是当我尝试像上面提到的随机字段时,solr不创建?
    我们是否也必须在其他任何地方声明这些随机字段?
    任何帮助是极大的赞赏。
    更新:调用方法 up.setParam("literal.myField") 不会修改 schema.xml 以创建新字段吗?

4

1 回答 1

3

那是因为您使用的是不包含url_fileandlocation字段的 solr 示例。你可以在schema.xml下面找到example/solr/conf。我建议您稍微清理一下,只保留您需要的字段,因为该模式包含很多您并不真正需要的字段。

创建 blah_s 字段是因为您使用的架构包含以下定义:

<dynamicField name="*_s" type="string"  indexed="true"  stored="true"/>

这是一个带有 suffix 的动态字段_s,这意味着带有该后缀的每个字段都将被 Solr 视为stringindexed并且stored也是如此。

要修改它,schema.xml您需要在本地打开它并对 xml 文件进行更改,然后重新加载 Solr。请记住,在架构更改后,您需要重新索引,重新运行您粘贴在问题中的代码。

于 2012-03-05T09:18:27.223 回答