kri*_*inn 7 search solr field facet
我在ApacheSolr中定义了动态字段:
我用它来存储产品功能,如:color_feature,diameter_feature,material_feature等.由于产品正在发生变化,这些领域的数量并不稳定.
是否有可能为具有相同查询的所有动态字段获取构面结果,或者我是否需要始终在查询中编写所有字段,例如facet.field=color_feature&facet.field=diameter_feature&facet.field=material_feature&facet.field=......
Solr 目前不支持 facet.field 参数中的通配符。
所以*_feature不会为你工作。
可能想检查一下 - https://issues.apache.org/jira/browse/SOLR-247
如果您不想传递参数,您可以轻松地将这些添加到您的请求处理程序默认值中。
该qt=requesthandler请求中总是会包括这些方面。
在电子商务平台上工作时,我处于类似的情况.每个项目有静态字段(Price,Name,Category),可以轻松地映射到Solr的schema.xml,但每个项目也可能有变化的动态量.
例如,T恤在商店可以具有Color(Black,White,Red等)和Size(Small,Medium,等等)的属性,而在相同的存储区中的蜡烛可以具有Scent(Pumpkin,Vanilla等)的变化.本质上,这是一个实体 - 属性 - 值(EAV)关系数据库设计,用于描述产品的某些功能.
由于schema.xmlSOLR中的文件从刻面的角度看是扁平的,所以我通过将变体修改为单个多值字段来解决它...
<field
name="variation"
type="string"
indexed="true"
stored="true"
required="false"
multiValued="true" />
Run Code Online (Sandbox Code Playgroud)
......从数据库数据搡到这些领域Color|Black,Size|Small和Scent|Pumpkin...
<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>
Run Code Online (Sandbox Code Playgroud)
...所以当我告诉SOLR时,我得到的结果看起来像......
<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>
Run Code Online (Sandbox Code Playgroud)
...这样我解析这些结果显示给用户的代码就可以拆分我的|分隔符(假设我的密钥和值都没有|在其中),然后按键分组...
Color
White (2)
Black (1)
Size
Extra Large (2)
Large (2)
Medium (2)
Small (2)
Run Code Online (Sandbox Code Playgroud)
......这对政府工作来说已经足够了.
这样做的一个缺点是你将失去在这个EAV数据上做范围方面的能力,但在我的情况下,这不适用(该Price字段适用于所有项目,因此被定义,schema.xml以便它可以以通常的方式面对).
希望这有助于某人!
| 归档时间: |
|
| 查看次数: |
7048 次 |
| 最近记录: |