2

假设具有 Author 字段的书籍列表。Author 字段的一个方面如何将“Stephen King”和“Richard Bachman”的值视为相同?使这些结果:

  • 海明威:8
  • 斯蒂芬金:10
  • 埃德加爱伦坡:20
  • 理查德巴赫曼:5

将显示为:

  • 海明威:8
  • 斯蒂芬金:15
  • 埃德加爱伦坡:20

请注意,分面标题是否为“Stephen King”、“Richard Bachman”或其他名称并不重要。唯一重要的是它们被刻面在一起。

请注意,需要查询时解决方案。不幸的是,这个索引的模式不能改变,它是一个通用索引,如果每个用户都可以让他自己的模式“调整”它就会失控。

4

3 回答 3

3

您可以通过将构面字段与构面查询相结合来实现这一点。

将这些添加到您的查询中:

&facet=true
&facet.field=author
&facet.query=author:("Hemmingway" OR "Stephen King")

返回的构面将如下所示:

facet_counts: {
    facet_queries: {
       "author:("Hemmingway" OR "Stephen King")" : 18
    }
    facet_fields: {
         author: {
            "Hemmingway"      : 8,
            "Stephen King"    : 10,
            "Edgar Allan Poe" : 20,
            "Richard Bachman" : 5
        }
    }
}

您还可以向构面查询添加“别名”。改变这个

&facet.query=author:("Hemmingway" OR "Stephen King")

&facet.query={!ex=dt key="Hemmingway"}author:("Hemmingway" OR "Stephen King")

方面查询输出将是:

    facet_queries: {
       "Hemmingway" : 18
    }

我不确定您是否可以合并 Solr 的两个输出字段(facet_queries 和 facet_fields),但从任何客户端执行此操作都应该是直截了当的。

于 2013-04-05T11:11:38.027 回答
1

您需要一个转换字符串的分析链。如果您在索引时和查询时应用它,我认为 SynonymFilter 会为您执行此操作。您需要确保 sysnonym 映射仅采用一种方式。

于 2013-03-15T13:52:47.777 回答
1

我假设您不需要完整的方面列表,只需要前 n 个作者。如果是这种情况,您可以在后处理步骤中进行。

你知道你的同义词,如果你把 facet.limit(比如说 2*n) 稍微高一点,那么你只需要从结果集中过滤掉同义词。如果您最终得到 < n 个结果,那么只需重复上一步(更糟糕的情况下,您必须根据同义词的数量再做一个请求)。

在前...&facet=true&facet.field=author&facet.limit=100&facet.mincount=1

这与 Solr 无关,但考虑到所有限制,它可能会削减它。

最好的祝福,

于 2013-04-10T09:49:48.837 回答