【问题标题】:SOLR Query for customized Sort in the Filtered result?SOLR查询过滤结果中的自定义排序?
【发布时间】:2012-08-10 08:24:02
【问题描述】:

在 Solr 索引记录中,假设我有这个示例记录(例如 JSON):

{
    "title":"Innovation Life and Strategy",
    "author":"Sarah Howard",
},
{
    "title":"Simple Life", <--- This will be ignored
    "author":"W. David",
},
{
    "title":"Today's Innovations",
    "author":"Michael Wayne", <--- This Author will be listed at the top
},
{
    "title":"The Innovation Records",
    "author":"Tommy Wright",
},
etc ..

如何进行 Solr 查询:

  • title 字段中由 innovation 过滤
    (所以我们在那里有 3 条记录)
  • 然后,对结果进行排序,将作者:Wayne 放在顶部

所以最终的结果应该是:

{
    "title":"Today's Innovations",
    "author":"Michael Wayne",
},
{
    "title":"Innovation Life and Strategy",
    "author":"Sarah Howard",
},
{
    "title":"The Innovation Records",
    "author":"Tommy Chen",
},

我只迈出了第一步,fq=title:*Innovation*

但我不知道第二步的查询(自定义排序)。
请问怎么弄啊?

【问题讨论】:

  • 自定义排序的依据、逻辑或规则是什么??有没有固定的逻辑???
  • 我的意思是你的自定义排序背后的逻辑是什么?因为在这种情况下焦点似乎很明显,但在其他情况下会有所不同。您可以提高韦恩的结果,这将导致它始终出现。但是,如果没有任何规则集,这是没有意义的,也不是通用的。
  • 提升?你的意思是我们可以使用Boost设置显示顺序优先级?你能举一些例子吗?
  • 如果您使用 dismax 查询处理程序,您可以轻松提升 bq=author:wayne^1.5 等记录。这将增加作者拥有韦恩的记录。但是,这太具体了,不是通用的规则。

标签: sorting solr filter


【解决方案1】:

您可以使用字段提升而不是排序。详情请查看http://wiki.apache.org/solr/SolrRelevancyFAQ

你可能需要这样的东西:

q=title:*&bq=author:Wayne^10&fq=title:*Innovation*

这会生成标题中包含“创新”的所有文档,匹配“Wayne”的文档得分更高。

确保使用 WhitespaceTokenizer(而不是 KeywordTokenizer)对“作者”进行索引,否则您将无法使用分隔词进行搜索(请参阅 http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters)。

【讨论】:

    【解决方案2】:

    在这种情况下,我认为这是不可能的,因为作者是一个多值字段,因为有两个值:名字和姓氏。 因此,如果您想按姓氏排序,则必须将此字段拆分为 2 个字段: author_first_name, author_surname

    您可以在索引时间拆分名称,例如使用数据导入处理程序。

    另一种解决方案是在 java 中编写自己的排序算法。

    关键(在每种情况下)是要找到确定的名字是什么,因为并非每个名字都只包含两个名字,例如Docotor Tommy Chenkim jong il - 也存在由两个名字组成的姓氏(尤其是在亚洲)。

    我认为这是真正的问题。

    【讨论】:

    • 嗯.. 至少,在过滤后,您将如何对单值字段进行排序?
    • fq=title:*Innovation*&sort=author desc 看看这个:wiki.apache.org/solr/CommonQueryParameters#sort
    • 不,没有将wayne 放在顶部的展示位置排序。只是简单的 A~Z 顺序。
    • 顺便说一下,如果我查看您的示例,如果词干提取处于活动状态,fq=title:*Innovation* 将返回与 fq=title:Innovation 相同的结果
    • solr 以作者为一串。所以它不知道“wayne”,但它知道“Michael Wayne”。使用我的示例,您使用的是降序排序,这意味着“最高”字母在前……取决于作者姓名的第一个字符。在这种情况下,“M”。但是看看你的例子“M”是“最小”的字符。此示例将创建以下顺序:“Tommy Chen” -> “Sarah Howard” -> “Michael Wayne” ... 取决于(第一个字符的)T->S->M 的降序字母顺序。您可以使用&amp;sort=author asc更改订单
    猜你喜欢
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 1970-01-01
    相关资源
    最近更新 更多