【问题标题】:How to remove escape character from solr indexed field?如何从 solr 索引字段中删除转义字符?
【发布时间】:2016-09-02 08:36:49
【问题描述】:

我将 Json 数据索引到 solr 字段中,例如

{"employees":[
    {"firstName":"John", "lastName":"Doe"},
    {"firstName":"Anna", "lastName":"Smith"},
    {"firstName":"Peter", "lastName":"Jones"}
]}

但是 Json 正在使用转义字符进行索引,所以现在我将 json 作为

  "{\"employees\":[\n    {\"firstName\":\"John\", \"lastName\":\"Doe\"},\n    {\"firstName\":\"Anna\", \"lastName\":\"Smith\"},\n    {\"firstName\":\"Peter\", \"lastName\":\"Jones\"}\n]}"

有没有什么方法可以在不转义 json 或转义结果的情况下进行索引,同时仅从 solr 端显示?

【问题讨论】:

  • 您是否将其作为 JSON 返回并且值在单个字段中?在这种情况下,Solr 必须对其进行转义,以便将值安全地保存在字段值中。然后,您的 JSON 库将对其进行解码,以便“fieldname”具有 JSON 字符串的值,然后您将再次对其进行解码。
  • 是的 @MatsLindh 仅在单个字段中索引 json。我没有得到你的最后一点,即“解码”,请更详细地解释它。
  • 解析 JSON 时,转义将被移除(因为它要求结果是有效的 JSON)。如果在检索 JSON 时(在通过库之后)仍然对其进行转义,则听起来您的 JSON 在您编制索引时被库双重转义。
  • @matslindh 谢谢,如何解决这个问题?任何特殊的标记器或分析器,或者可能是字段类型.. 作为 m 尝试基本 json 并通过 solr ui 的更新对其进行索引。
  • 不可能说 - Solr 中没有任何固有的东西会给你这个问题。结果应在提交时返回(因为它与标记器/分析器分开存储)。您必须添加更多详细信息才能给出更详细的答案。

标签: solr


【解决方案1】:

这是在 solr 文本字段中完美存储 json 数据。 如果您通过管理员查看它,您将在 UI 中看到转义格式的 json,但如果您要查询它然后解码 json,它将以您使用的语言返回正确的对象。 Python 示例。

my_json_field =  json_string // read from solr using api calls or module like pysolr
my_obj = json.loads(my_json_field)

【讨论】:

  • 谢谢兄弟,但我需要一个不使用 pysolr 或其他东西的纯 solr 解决方案
  • @DimagKharab 重点是完全没有问题,你的json数据正确存储在solr中。
  • 是的,兄弟,但需要在结果中获取未转义的 json,因为我们想在客户端或 api 中再解析一次
【解决方案2】:

最后解决方案非常简单,使用Transforming Result Documents

例如,

fl=my_field_with_escaped_json:[json]

谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多