我在ApacheSolr中定义了动态字段:
我用它来存储产品功能,例如:color_feature,diameter_feature,material_feature等。由于产品正在发生变化,这些领域的数量并不稳定。
是否可以为具有相同查询的所有动态字段获取构面结果,或者我是否需要始终在查询中编写所有字段,例如...... facet.field=color_feature&facet.field=diameter_feature&facet.field=material_feature&facet.field=
...
答案 0 :(得分:5)
在电子商务平台上工作时,情况类似。每个项目都有静态字段(Price
,Name
,Category
),可以轻松映射到SOLR的schema.xml
,但每个项目也可能具有动态数量的变化。
例如,商店中的T恤可能有Color
(Black
,White
,Red
等)和Size
({ {1}},Small
等)属性,而同一商店中的蜡烛可能有Medium
(Scent
,Pumpkin
等)变体。本质上,这是一个实体 - 属性 - 值(EAV)关系数据库设计,用于描述产品的某些功能。
由于SOLR中的Vanilla
文件从分面的角度来看是平的,我通过将变体整合到一个多值字段中来解决它...
schema.xml
...将数据从数据库推送到这些字段<field
name="variation"
type="string"
indexed="true"
stored="true"
required="false"
multiValued="true" />
,Color|Black
和Size|Small
......
Scent|Pumpkin
...所以当我告诉SOLR时,我得到的结果看起来像......
<doc>
<field name="id">ITEM-J-WHITE-M</field>
<field name="itemgroup.identity">2</field>
<field name="name">Original Jock</field>
<field name="type">ITEM</field>
<field name="variation">Color|White</field>
<field name="variation">Size|Medium</field>
</doc>
<doc>
<field name="id">ITEM-J-WHITE-L</field>
<field name="itemgroup.identity">2</field>
<field name="name">Original Jock</field>
<field name="type">ITEM</field>
<field name="variation">Color|White</field>
<field name="variation">Size|Large</field>
</doc>
<doc>
<field name="id">ITEM-J-WHITE-XL</field>
<field name="itemgroup.identity">2</field>
<field name="name">Original Jock</field>
<field name="type">ITEM</field>
<field name="variation">Color|White</field>
<field name="variation">Size|Extra Large</field>
</doc>
...以便我解析这些结果以显示给用户的代码可以在我的<lst name="facet_counts">
<lst name="facet_queries"/>
<lst name="facet_fields">
<lst name="variation">
<int name="Color|White">2</int>
<int name="Size|Extra Large">2</int>
<int name="Size|Large">2</int>
<int name="Size|Medium">2</int>
<int name="Size|Small">2</int>
<int name="Color|Black">1</int>
</lst>
</lst>
<lst name="facet_dates"/>
<lst name="facet_ranges"/>
</lst>
分隔符上拆分(假设我的密钥和值都没有|
)和然后按键分组......
|
......这对政府工作来说已经足够了。
这样做的一个缺点是你将失去在这个EAV数据上做范围方面的能力,但在我的情况下,这不适用(Color
White (2)
Black (1)
Size
Extra Large (2)
Large (2)
Medium (2)
Small (2)
字段适用于所有项目和因此在Price
中定义,以便可以通常的方式进行分割。
希望这有助于某人!
答案 1 :(得分:4)
Solr目前不支持facet.field参数中的通配符
因此*_feature
对您不起作用。
可能想要检查一下 - https://issues.apache.org/jira/browse/SOLR-247
如果您不想传递参数,可以轻松地将这些参数添加到请求处理程序默认值中。
请求中的qt=requesthandler
将始终包含这些方面。