Solr 搜索整个索引,但只搜索 return 最低级别的后代
Solr search entire index but only return the lowest level descendents
我完全迷失了 Solr 生态系统……也许是因为我正在处理的数据结构根本难以在 Solr 中正确处理。我正在尝试为分层分类系统(NAICS:https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553)编制索引 documents/entries。
结构是这样的:
- 11-农业
- 111-农作物产量
- 1111-油料种子和粮食种植
- 11111-D 大豆种植
- 111110-大豆种植
- 111111-其他豆类种植
- 11112-小麦种植
- 111120-小麦种植
我想要的是索引 Solr 中的整个结构(使用推荐的任何方式,即嵌套文档,或其他一些 category/path 变量解决方案等),以便当用户搜索时,他们的搜索词是太宽泛,无法在结构的较低级别进行匹配,而是在所有后代仍然匹配的结构中进行更高级别的匹配,而不是 returned。
例如,用户搜索 'oil seed farming' 并且命中 return 表示 1111-油籽和谷物种植的文档。相反,我想要的只是 return 该条目 (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
}
}
}
将每个较低的叶子索引为文档。对于每个文档,包括父项中的所有术语,一直到根。这会给你类似的东西:
{
"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 hierarchy tokenizer field)作为 path
, 如果需要,您还可以进行精确匹配以查找层次结构。
我完全迷失了 Solr 生态系统……也许是因为我正在处理的数据结构根本难以在 Solr 中正确处理。我正在尝试为分层分类系统(NAICS:https://www23.statcan.gc.ca/imdb/p3VD.pl?Function=getVD&TVD=1181553)编制索引 documents/entries。
结构是这样的:
- 11-农业
- 111-农作物产量
- 1111-油料种子和粮食种植
- 11111-D 大豆种植
- 111110-大豆种植
- 111111-其他豆类种植
- 11112-小麦种植
- 111120-小麦种植
- 11111-D 大豆种植
- 1111-油料种子和粮食种植
- 111-农作物产量
我想要的是索引 Solr 中的整个结构(使用推荐的任何方式,即嵌套文档,或其他一些 category/path 变量解决方案等),以便当用户搜索时,他们的搜索词是太宽泛,无法在结构的较低级别进行匹配,而是在所有后代仍然匹配的结构中进行更高级别的匹配,而不是 returned。 例如,用户搜索 'oil seed farming' 并且命中 return 表示 1111-油籽和谷物种植的文档。相反,我想要的只是 return 该条目 (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
}
}
}
将每个较低的叶子索引为文档。对于每个文档,包括父项中的所有术语,一直到根。这会给你类似的东西:
{
"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 hierarchy tokenizer field)作为 path
, 如果需要,您还可以进行精确匹配以查找层次结构。