0

我完全迷失在掌握 Solr 生态系统...也许是因为我正在处理的数据结构从根本上难以在 Solr 中正确处理。我正在尝试索引分层分类系统的文档/条目(NAICS:https ://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553 )。

结构是这样的:

  • 11-农业
    • 111-作物生产
      • 1111-油料种子和粮食种植
        • 11111-D 大豆种植
          • 111110-大豆种植
          • 111111-其他豆类养殖
        • 11112-小麦种植
          • 111120-小麦种植

我想要的是索引 Solr 中的整个结构(使用推荐的任何方式,即嵌套文档或其他一些类别/路径变量解决方案等),以便当用户搜索并且他们的搜索词过于广泛而无法在较低级别匹配结构,而是匹配结构中更高的结构,所有后代仍然匹配并返回。例如,用户搜索“油料种子种植”并返回代表 1111-油料种子和谷物种植的文档的匹配项。我想要的是只返回该条目的最后一个叶子后代(111110、111111、111120),就好像它们首先匹配一样。在 Solr 中如何实现这一点或有哪些选择?最终目标是仅根据用户查询将结构过滤到最低叶。

编辑:根据收到的建议,这是我制定的方法。

curl http://localhost:8983/solr/NAICS/query -d '{
  "query": "{!join from=ANCESTOR_PATH to=DESCENDANT_PATH}NAICS:1111",
  "facet": {
    "TREE_NODES": {
      "type": "query",
      "q": "LEVEL:5",
      "facet" : {
        "TREE": {
          "type": "terms",
          "field": "DESCENDANT_PATH",
          "limit":-1
        }
      }
    }
4

1 回答 1

0

将每个较低的叶子索引为一个文档。对于每个文档,包括父项中的所有术语,一直到根。这会给你类似的东西:

{
  "id": "111110",
  "name": "Soybean Farming",
  "path": "11-Agriculture/111-Crop Production/1111-Oil seed and Grain farming/11111-D Soybean Farming",
  "categories": [
    "11-Agriculture",
    "111-Crop Production",
    "1111-Oil seed and Grain farming",
    "11111-D Soybean Farming"
  ]
}

这将允许您针对该categories字段搜索任何术语,并且如果您对 使用string字段(或路径层次结构标记器字段path,您还可以根据需要进行精确匹配以查找层次结构。

于 2020-05-13T08:54:47.900 回答