Search ApacheSolr的方面动态字段

Search ApacheSolr的方面动态字段,search,solr,field,facet,Search,Solr,Field,Facet,我在ApacheSolr中定义了动态场: 我用它来存储产品特性,比如:颜色特性、直径特性、材料特性等等。这些字段的数量不是恒定的,因为产品在变化 是否有可能通过同一个查询获得所有这些动态字段的方面结果,或者我是否需要在一个查询中始终写入所有字段,如facet.field=color\u feature&facet.field=diameter\u feature&facet.field=material\u feature&facet.field=…Solr当前不支持facet.field参数

我在ApacheSolr中定义了动态场:

我用它来存储产品特性,比如:颜色特性、直径特性、材料特性等等。这些字段的数量不是恒定的,因为产品在变化


是否有可能通过同一个查询获得所有这些动态字段的方面结果,或者我是否需要在一个查询中始终写入所有字段,如
facet.field=color\u feature&facet.field=diameter\u feature&facet.field=material\u feature&facet.field=

Solr当前不支持facet.field参数中的通配符。
因此,
*\u功能
对您不起作用

我想看看这个-

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


请求中的
qt=requesthandler
总是包含这些方面。

在电子商务平台上工作时,我也遇到过类似的情况。每个项目都有静态字段(
Price
Name
Category
),可以轻松映射到SOLR的
schema.xml
,但每个项目也可能有动态变化量

例如,商店里的t恤衫可以有
颜色
黑色
白色
红色
,等等)和
尺寸
小的
中等的
,等等)属性,而同一家商店里的蜡烛可以有
香味
南瓜
香草的
等等)变化。本质上,这是一个实体属性值(EntityAttribute-value,EAV)关系数据库设计,用于描述产品的一些特性

由于SOLR中的
schema.xml
文件从刻面的角度来看是扁平的,因此我通过将变体转换为单个多值字段来解决这个问题

<field
  name="variation"
  type="string"
  indexed="true"
  stored="true"
  required="false"
  multiValued="true" />
。。。所以当我告诉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>
。。。这对于政府工作来说已经足够好了

这样做的一个缺点是,您将失去在此EAV数据上进行范围刻面的能力,但在我的例子中,这并不适用(应用于所有项目的
Price
字段,因此在
schema.xml
中定义,以便可以以通常的方式刻面)


希望这对别人有帮助

它剥离了我的标记,动态字段如下所示:dynamicField name=“*\u feature”type=“string”index=“true”stored=“true”在编辑问题时使用格式按钮。回答很好,但是添加了一个requestHandler有点忽略了要点。如果字段是动态的,requestHandler也必须是动态的。这是不可能的。。如果添加的字段是完全动态的,则不能使用具有固定方面的请求处理程序。但是您可以使用append模式定义一组固定的列表,并在查询中传递其余的列表。可以减少URL中的参数。这比动态字段有什么好处吗?正如您所提到的,此解决方案不允许范围方面。我理解你关于价格的论点。但是数量呢?每种变体可能不同。那么,您是如何存储每种变体的数量的?我只想筛选可用变体的搜索。有没有办法做到这一点?有没有人知道当前版本的Solr/Lucene是否支持动态字段上的facet?
<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>
Color
    White (2)
    Black (1)
Size
    Extra Large (2)
    Large (2)
    Medium (2)
    Small (2)