在solr中保留多值的关联

时间:2014-04-28 08:40:16

标签: solr multivalue

我的solr数据源中有多个字段。样品是

<doc>
<str name="id">23606</str>
<arr name="institution">
    <str>Harvard University</str>
    <str>Yale Universety</str>
    <str>Cornell University</str>
    <str>TUFTS University</str>
    <str>University of Arizona</str>
</arr>
<arr name="degree_level">
    <str>Bachelors</str>
    <str>Diploma</str>
    <str>Master</str>
    <str>Master</str>
    <str>PhD</str>
</arr>
</doc>

在上面的例子中,这位用户获得了哈佛大学的学士学位,耶鲁大学的文凭,康奈尔大学的硕士学位,TUFTS的硕士学位以及亚利桑那州的博士学位。 现在如果我搜索拥有学士学位并从哈佛毕业的用户,我会得到这个用户,这是正确的。 MyDomain:8888/solr/mycol/select?facet=true&q=:&fq=degree_level:Bachelors&fq=institution:Harvard+University

但如果我想要那些拥有康奈尔学士学位的学生,我也会得到这个用户,这是不正确的! MyDomain:8888/solr/mycol/select?facet=true&q=:&fq=degree_level:Bachelors&fq=institution:Cornell+University
问题是:如何在solr中保留多值的排序/映射?
修改:
顺便说一句,我知道我可以通过创建新的字段来解决我的问题,包含与大学的学位联系(即“Bachelors_Harvard大学”,“Diploma_Yale Universety”等),但我需要一个基于solr核心的解决方案因为我有很多具有很多组合的多值字段。

1 个答案:

答案 0 :(得分:1)

以下是一些建议列表

  • 尝试使用动态字段
    &lt; dynamicField name =“degree_level_ *”type =“string”indexed =“true”stored =“true”/&gt;
    并在使用值Harward University等索引degree_level_Bachelors时动态创建字段。因此,当您想要过滤学士学位时,请过滤字段degree_level_Bachelors。同样,如果您想允许对机构进行过滤,请为机构创建动态字段。
  • 您可以预先定义如何存储数据: &LT;&一年GT;&LT;分隔符&GT;&LT;&度GT;&LT;分隔符&GT;&LT;体制&GT;&LT;分隔符&GT;&LT;主要&GT;等等 然后过滤所需的正则表达式。
    例如:
    fq = educationDetails:2009 @ Bachelors @ Harvard @ *
    这将为您提供2009年哈佛大学单身汉的所有记录。 你将不得不为所有不同的过滤器提出正则表达式。
  •  使用{!join}正确建模用户和程度之间的一对多关系的两个集合
  • 一个“用户级”粒度级别的集合,通过Solr的字段折叠支持进行重复数据删除。