假设具有“作者”字段的书籍列表。如何在作者领域面对一个方面,但将“斯蒂芬金”和“理查德巴赫曼”的价值视为一样?所以这些结果:
将显示为:
请注意,如果小标题是“斯蒂芬金”,“理查德巴赫曼”或其他什么,那就不重要了。重要的是他们共同面对。
请注意,需要一个查询时解决方案。不幸的是,这个索引的模式无法更改,它是一个通用索引,如果每个用户都可以自己进行模式“调整”,那么它就会失控。
答案 0 :(得分:3)
您可以通过将构面字段与构面查询相结合来实现这一目标。
将这些添加到您的查询中:
&facet=true
&facet.field=author
&facet.query=author:("Hemmingway" OR "Stephen King")
返回的Facets将如下所示:
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查询输出将是:
facet_queries: {
"Hemmingway" : 18
}
我不确定你是否可以从Solr合并两个输出字段(facet_queries和facet_fields),但是从任何客户端执行此操作应该是直截了当的。
答案 1 :(得分:1)
您需要一个转换字符串的分析链。我认为如果您在查询时在索引时和应用它,SynonymFilter将为您执行此操作。您需要确保sysnonym映射只有一种方式。
答案 2 :(得分:1)
我假设你不需要整个清单,只有前n位作者。如果是这种情况,您可以在后处理步骤中执行此操作。
你知道你的同义词,如果你稍微高一点facet.limit(比如2 * n)那么你只需要从结果集中过滤出同义词。如果你最终得到< n结果然后重复上一步(更糟糕的是,你必须再做一个请求,具体取决于同义词的数量)。
在ex ... &facet=true&facet.field=author&facet.limit=100&facet.mincount=1
这个与Solr无关,但考虑到它可能会削减它的所有限制。
致以最诚挚的问候,