Solr搜索整个索引,但只返回最低级别的后裔。

问题描述 投票:0回答:1

我对Solr生态系统完全不了解......也许是因为我所处理的数据结构从根本上来说很难在Solr中正确处理。 我正试图对一个分级分类系统(NAICS.Net)的文档entries进行索引。https:/www23.statcan.gc.caimdbp3VD.pl?Function=getVD&TVD=1181553。).

结构是这样的。

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

我想要的是在Solr中对整个结构进行索引(推荐使用任何手段,即嵌套文档,或其他分类路径变量解决方案等),这样当用户搜索时,他们的搜索条件太宽泛,无法在结构的较低层级进行匹配,而是在结构的较高层级进行匹配时,所有的子代仍然会被匹配并返回。例如,用户搜索 "油籽种植",返回了一个代表1111-油籽和谷物种植的文档的命中。 我想要的是只返回该词条的最后一片叶子的后裔(111110,111111,1111120),就像他们一开始就被匹配了一样。 在Solr中如何实现这个目标,或者有哪些选择? 最终的目标是根据用户的查询将结构过滤到最低的叶子。

edit:根据收到的建议,这是我想出的办法。

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
        }
      }
    }
solr hierarchy solr8
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如果你想的话,你也可以进行完全匹配来查找一个层次结构。

© www.soinside.com 2019 - 2024. All rights reserved.