使用apache solr进行facet动态字段

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=......

Jay*_*dra 5

Solr 目前不支持 facet.field 参数中的通配符。
所以*_feature不会为你工作。

可能想检查一下 - https://issues.apache.org/jira/browse/SOLR-247

如果您不想传递参数,您可以轻松地将这些添加到您的请求处理程序默认值中。

qt=requesthandler请求中总是会包括这些方面。


Nic*_*cki 5

在电子商务平台上工作时,我处于类似的情况.每个项目有静态字段(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|SmallScent|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以便它可以以通常的方式面对).

希望这有助于某人!