Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Search 获取所属多个组/类别中的单个SOLR文档_Search_Solr_Lucene_Faceted Search_Facets - Fatal编程技术网

Search 获取所属多个组/类别中的单个SOLR文档

Search 获取所属多个组/类别中的单个SOLR文档,search,solr,lucene,faceted-search,facets,Search,Solr,Lucene,Faceted Search,Facets,我们正在使用SOLR为电子商务应用程序的产品编制索引,我们有按类别和子类别分组的产品,同一产品可以出现在多个子类别中,我们需要检索它所属的所有子类别中的产品,并希望使用一个查询来实现此目标。任何指示都会非常有用。下面举例说明- 假设产品p1属于子类别sc1,sc2属于父类别c1 c1---sc1---p1 c1---sc2---p1 我们为产品编制索引的方式是在产品p1中包含类别路径信息, p1-类别路径(c1->sc1和c1->sc2) 当用户浏览类别c1时,产品应在按子类别sc1和sc2分组

我们正在使用SOLR为电子商务应用程序的产品编制索引,我们有按类别和子类别分组的产品,同一产品可以出现在多个子类别中,我们需要检索它所属的所有子类别中的产品,并希望使用一个查询来实现此目标。任何指示都会非常有用。下面举例说明-

假设产品p1属于子类别sc1,sc2属于父类别c1

c1---sc1---p1

c1---sc2---p1

我们为产品编制索引的方式是在产品p1中包含类别路径信息, p1-类别路径(c1->sc1和c1->sc2)

当用户浏览类别c1时,产品应在按子类别sc1和sc2分组的页面上出现两次,如下所示

c1---sc1


我们希望从solr查询,以便它返回分组在两个不同子类别中的相同产品,从而有效地复制结果。我们可以在从solr获取结果后通过编程实现,但我们有分页和排序顺序逻辑,这在代码中很难维护。

这就像标签一样。您知道,当您标记事物时,单个项目可以有多个标记。在SOLR中,您可以将其表示为一个多值字段,即一个值数组

您需要将“子类别”设置为多值字段。我认为您对路径的引用意味着在多个不相关的类别中使用相同的子类别标识符,因此您将类别和子类别组合在一起以获得唯一的键

在这种情况下,您可能会:

p1, [c1>sc1]
p2, [c1>sc2,c1>sc7]
p3, [c1>sc5]
p4, [c1>sc1,c1>sc5]

当检索子类别与c1匹配的所有产品以实际多次返回该产品时,该产品的Solr索引中需要多条记录。然而,我怀疑这会使更新单个产品记录变得有点困难——假设您使用的是唯一的密钥,那么您需要一个基于产品ID和子类别的密钥

我同意Michael Dillon的建议,将“子类别”设置为多值字段,然后对结果进行适当格式化。

这很有用:。Solr faceting返回搜索检索的所有方面。
p1, [c1>sc1]
p2, [c1>sc2,c1>sc7]
p3, [c1>sc5]
p4, [c1>sc1,c1>sc5]