solr:如何添加不在文档中的额外字段值

时间:2014-07-28 21:02:02

标签: solr solrcloud

我知道lucene,刚开始学习如何使用solr。在简单的例子中,添加文档的方法是使用示例../update -jar post.jar来添加文档,问题是没有在java中编写我自己的添加文档,使用相同的方式(... post。 jar),有没有办法添加不在文档中的其他字段?例如,假设我的架构包括名称,年龄,id字段,但文档没有'id'字段,但我想要包含id及其值,当然我知道我想要的id和值但是我如何包含它?

先谢谢!

1 个答案:

答案 0 :(得分:0)

我不相信你可以混合这两者。您可以使用post.jar使用命令行传入的参数,文件,标准输入或网页上的简单爬网来添加文档,但无法将它们组合在一起。在post.jar的源代码中,您可以看到它是一系列else if语句,因此它们是互斥的。

  

-Ddata args,stdin,files,web

     

使用args沿命令行传递参数(例如命令)   删除文件)。使用文件传递文件名或正则表达式模式   指示路径和文件名。使用stdin使用标准输入。使用   用于非常简单的Web爬虫的Web(对此的参数将是URL   爬行)。

https://cwiki.apache.org/confluence/display/solr/Simple+Post+Tool

/**
   * After initialization, call execute to start the post job.
   * This method delegates to the correct mode method.
   */
  public void execute() {
    final long startTime = System.currentTimeMillis();
    if (DATA_MODE_FILES.equals(mode) && args.length > 0) {
      doFilesMode();
    } else if(DATA_MODE_ARGS.equals(mode) && args.length > 0) {
      doArgsMode();
    } else if(DATA_MODE_WEB.equals(mode) && args.length > 0) {
      doWebMode();
    } else if(DATA_MODE_STDIN.equals(mode)) {
      doStdinMode();
    } else {
      usageShort();
      return;
    }

    if (commit)   commit();
    if (optimize) optimize();
    final long endTime = System.currentTimeMillis();
    displayTiming(endTime - startTime);
  }

http://svn.apache.org/repos/asf/lucene/dev/trunk/solr/core/src/java/org/apache/solr/util/SimplePostTool.java

您可以尝试修改代码,但我认为更好的选择是预先处理您的xml文件以包含缺少的字段,或者学习使用API​​(通过Java或使用Curl命中)来执行这是你自己的。