SOLR查询过滤结果中的自定义排序?

时间:2012-08-10 08:24:03

标签: sorting solr filter

在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查询:

  • innovation字段中title过滤了(所以我们在那里有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*

但我不知道第二步的查询(自定义排序) 我怎么能得到它?

2 个答案:

答案 0 :(得分:4)

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

您可能需要以下内容:

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

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

确保使用WhitespaceTokenizer(与KeywordTokenizer相对)索引“author”,否则您将无法使用分隔的单词进行搜索(请参阅http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters)。

答案 1 :(得分:0)

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

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

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

要点(在每种情况下)都要查找,确定名称是什么,因为并非每个名称只包含2个名称,如Docotor Tommy Chenkim jong il - 也存在姓氏由2组成名字(特别是在亚洲)。

我认为这是真正的问题。