【问题标题】:SOLR post json file Default fieldtypeSOLR post json 文件 默认字段类型
【发布时间】:2019-01-29 17:41:20
【问题描述】:

我的 json 文件中有 POSTAL_CODE 字段。如果我尝试使用 solr/post 将该数据导入 SOLR,则字段类型被设置为“plongs”,这不适合“108-0023”之类的数据。因为数据导入抛出了一个错误。这类问题有解决办法吗?

编辑: 您可以用来检查它的示例数据。

{
  "id": "1",
  "POSTAL_CODE": "1982"
},
{
  "id": "2",
  "POSTAL_CODE": "1947"
},
{
  "id": "3",
  "POSTAL_CODE": "19473"
},
{
  "id": "4",
  "POSTAL_CODE": "19471"
},
{
  "id": "5",
  "POSTAL_CODE": "1947-123"
}

在上面的示例中,我不明白为什么“id”不被视为“plongs”或“pints”,而只有“POSTAL_CODE”有这个问题。如果第一个元素的 POSTAL_CODE 为“1947-145”,则该字段类型被视为“text_general”。一般来说,如果值有双引号,(即“Data”:“123”)不应该被视为字符串值吗?

【问题讨论】:

    标签: json solr data-import


    【解决方案1】:

    我尝试通过创建一个包含 POSTAL_CODE 字段的原始 json 文档来导入数据。下面是我的 json & 我的 solr 版本是 7.2.1

    {"array": [1,2,3],"boolean": true,"color": "#82b92c","null": null,"number": 123,"POSTAL_CODE": "108-0023"}
    

    它在 solr 中被索引为 Text Field 下面是随附的屏幕截图。我触发索引数据的命令如下:

    bin/post -c gettingstarted test.json
    

    能否提供您面临此问题的示例数据和 solr 版本。

    【讨论】:

    • 您看到不同行为的原因是因为您使用破折号为内容编制索引。如果您首先索引内容为常规整数的文档,则它将被定义为 plong。在无模式模式下,第一次使用字段时,Solr 根据内容猜测其字段类型。
    • 是的,我唯一想知道的是如何删除破折号并生成 solr 然后假设为 longs 的串联数字
    • @sriharshay 我希望您现在知道问题所在,让我为您总结一下。由于您的案例中的 solr 架构是托管架构,因此如果您没有明确提供架构,它会通过正则表达式等创建字段。所以 postal_code 字段的第一个文件一旦到达 solr,它是数字的,所以 solr 分配它。但是,当它看到您的最后一个文档包含 - 时,它会抱怨字段并给出错误。因此,正如 Harald 提到的,请定义该字段的架构并在清理后进行重新索引。
    • @sriharshay 您看到 Id 作为字符串字段的原因,因为如果您进入托管模式 id 字段将被预定义为字符串字段并配置为唯一键。例如
    【解决方案2】:

    删除集合,将其创建为新集合,然后在索引任何内容之前,在架构中将字段 POSTAL_CODE 定义为字符串类型。然后,这将在不猜测的情况下索引该字段上的任何传入数据,而是使用字符串类型,这意味着它按原样索引。

    https://lucene.apache.org/solr/guide/7_0/schema-api.html复制和改编,但未经测试:

    curl -X POST -H 'Content-type:application/json' --data-binary '{
      "add-field":{
         "name":"POSTAL_CODE",
         "type":"string",
         "stored":true }
    }' http://localhost:8983/solr/yourcollectionhere/schema
    

    【讨论】:

    • 这是唯一的方法。因为可能有很多领域会面临这样的问题。你说的是正确的,在索引之前定义字段。但是,有没有其他方法可以解决这个问题?
    • 您应该始终明确定义您的架构以供生产使用。无模式模式适用于试验和快速开发,但是当您要在生产中使用某些东西时,应该明确定义模式。否则你可能会遇到这样的问题。
    • 哦。好的,这是有道理的。因此,导入数据没有捷径。事先定义架构中的所有内容以避免此类问题。谢谢:)
    猜你喜欢
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 1970-01-01
    • 2022-01-02
    • 1970-01-01
    相关资源
    最近更新 更多