solr - 将两个方面视为相同的值

标签 solr faceted-search

假设有一个包含“作者”字段的书籍列表。作者字段的某一方面如何将“Stephen King”和“Richard Bachman”的值视为相同?从而得到这些结果:

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

将显示为:

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

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

请注意,需要查询时解决方案。不幸的是,这个索引的架构无法更改,它是一个通用索引,如果每个用户都可以“调整”自己的架构,那么它就会失控。

最佳答案

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

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

&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),但从任何客户端执行此操作应该是简单的。

关于solr - 将两个方面视为相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15433968/

相关文章:

java - 所选方面不应使用 hibernate 搜索过滤自己的组

azure - Microsoft.Azure.Search(sdk v3.0.3)未正确返回所有方面

java - solr 不能删除任何东西

ruby-on-rails - 什么数据库用于 15M 记录和快速搜索索引

solr - 将多个文件发送到solr

java - Solr Faceting 计数降至零

java - Solr Faceting - 忽略构面计数中没有值的字段

java - 获取某个类别的文档数量