首页 > 解决方案 > 使用多值字段的 SOLR 图遍历

问题描述

尝试使用多值字段对我的集合进行图形遍历。像这样的简单搜索表达式的结果

搜索(mycollection,q="pscnav:Magazines", qt="/select",fl="pscnav,connamenav",sort="connamenav asc")

可能如下。

{
  "result-set": {
    "docs": [
      {
        "connamenav": [
          "Marco Lambert",
          "Alan Harding"
        ],
        "pscnav": [
          "Magazines"
        ]
      },
      {
        "connamenav": [
          "Alfred Mitchell",
          "Raquel Schultz"
        ],
        "pscnav": [
          "Magazines"
        ]
      },                
      {
        "connamenav": [
          "Audra Young"
        ],
        "pscnav": [
          "Magazines",
          "Third Party Debt Collection",
          "Credit Information Furnishers"
        ]
      },      
      {
        "EOF": true,
        "RESPONSE_TIME": 17
      }
    ]
  }
}

我想对此结果进行图形遍历。但由于此结果中的字段具有多个值,因此节点表达式不起作用。所以我将这个搜索结果包装在笛卡尔产品表达式中,如下所示。

CartesianProduct(搜索(mycollection,q="pscnav:Magazines", qt="/select",fl="pscnav,connamenav",sort="connamenav asc"),pscnav,connamenav)

这将所有具有单个值的元组展平。结果如下

{
  "result-set": {
    "docs": [
      {
        "connamenav": "Marco Lambert",
        "pscnav": "Magazines"
      },
      {
        "connamenav": "Alan Harding",
        "pscnav": "Magazines"
      },
      {
        "connamenav": "Alfred Mitchell",
        "pscnav": "Magazines"
      },
      {
        "connamenav": "Raquel Schultz",
        "pscnav": "Magazines"
      },      
      {
        "connamenav": "Audra Young",
        "pscnav": "Magazines"
      },
      {
        "connamenav": "Audra Young",
        "pscnav": "Third Party Debt Collection"
      },
      {
        "connamenav": "Audra Young",
        "pscnav": "Credit Information Furnishers"
      },
      {
        "EOF": true,
        "RESPONSE_TIME": 16
      }
    ]
  }
}

接下来我想使用节点表达式遍历这个结果集。在下面使用这个表达式

节点(cartesianProduct(search(mycollection,q="pscnav:Magazines", qt="/select",fl="pscnav,connamenav",sort="connamenav asc"),pscnav,connamenav), walk="Magazines-> pscnav",gather="connamenav")

它抛出异常 - java.util.concurrent.ExecutionException: java.lang.RuntimeException: java.io.IOException: java.io.IOException: Slices not found for cartesianProduct(search(mycollection,q="pscnav:Magazines",qt= "/select",fl="pscnav,connamenav",sort="connamenav asc"),pscnav,connamenav)

或者,如果我使用此版本的节点表达式 -

节点(mycollection,cartesianProduct(搜索(mycollection,q="pscnav:Magazines", qt="/select",fl="pscnav,connamenav",sort="connamenav asc"),pscnav,connamenav), walk="pscnav ->pscnav",gather="connamenav")

它抛出异常“null:java.lang.IllegalStateException:字段'connamenav'的意外文档值类型SORTED_SET(预期= SORTED)。使用正确的文档值类型重新索引”

任何建议,我在这里做错了什么?将 CartesianProduct 的结果重新索引到单独的 solr 集合对我来说并不是一个真正的选择。寻找查询时间解决方案。

任何指针都会非常感激

谢谢

标签: graphsolrstreaming

解决方案


推荐阅读