使用CSV更新UI进行Solr索引:创建唯一键作为多值字段错误

时间:2017-04-12 19:05:16

标签: csv solr lucene solrcloud solr6

我正在尝试使用solr Admin UI在solr 6.5集合中加载CSV文件。以下是我执行的步骤,并收到以下错误:

  1. 在Zookeeper中创建了一个数据驱动的托管架构配置集。将唯一键更改为“MyId”(字符串字段)而不是默认ID。
  2. <uniqueKey>MyId</uniqueKey>
            ...
    <field name="MyId" type="string" indexed="true" stored="true" required="true" multiValued="false" />
    
    1. 创建集合并关联上面提到的配置集(使用新的管理界面)。

    2. 使用管理界面加载CSV文件(集合 - &gt;集合名称下拉列表 - &gt;文档)。我添加了&rowid=MyId参数的请求处理程序参数。我的CSV文件中包含MyId字段。在加载过程中,我收到此错误:

      Document contains multiple values for uniqueKey field: MyId=[82552329, 1] at org.apache.solr.update.AddUpdateCommand.getHashableId(AddUpdateCommand.java:168)

    3. 在不更改唯一ID且仅使用默认id(使用自动生成的UUID)字段的情况下,csv加载正常。但我需要唯一的ID为MyId

    4. 我想知道为什么我的关键字段被报告为多值,我的CSV实际上并不包含多值数据,它是简单的逗号分隔的数字和字符串字段。请说明可能出现的问题。

      注意:我在模式中也进行了此更改Solr Schemaless Mode creating fields as MultiValued(没有帮助,因为问题是输入数据)

      编辑:添加完整的异常跟踪

      https://pastebin.com/raw/juRj7ZUi

1 个答案:

答案 0 :(得分:1)

我在文档csv update params中得到了一个线索,即问题与我传递的这个参数(<?php $user_id = $_SESSION['user_id']; $sql = "SELECT points.appoint_date, beauticians.b_firstname, users.username, service.service_name FROM points INNER JOIN service ON service.service_id = service.service_id INNER JOIN beauticians ON beauticians.beautician_id = beauticians.beautician_id INNER JOIN users ON users.id = users.id"; $query = $connect->query($sql); // close database connection $connect->close(); ?> <!DOCTYPE html> <html> <head> <title>Home</title> </head> <body> <?php while($result = $query->fetch_array()) { ?> <ul> <li>Hello, <?php echo $result['username'] ?> </li> <li>Hello, <?php echo $result['b_firstname'] ?> </li> <li>Hello, <?php echo $result['service_name'] ?> </li> <li>Hello, <?php echo $result['appoint_date'] ?> </li> </ul> <?php } ?> )有关。正如文档所述,我们应该通过这个参数来添加行号作为id。这就解释了为什么我的密钥(&rowid=MyId)变成多值([我的实际密钥,行号])。但是,如果我删除此参数,则会发出MyId未填充的错误。这意味着它期待一个id字段。所以添加id,现在一切正常(这是因为在我的架构中需要&literal.id=1字段。)。谢谢你的帮忙。