2012-08-10 33 views
1

在Solr的索引的记录,可以说,我有这个样本记录(例如JSON):SOLR查询自定义排序筛选结果?

{ 
    "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的查询到:

  • 通过innovationtitle领域
    过滤(所以我们有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*

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

+0

什么是自定义排序的基础或逻辑或规则?有没有任何固定的逻辑? – Jayendra 2012-08-10 09:00:56

+0

我不知道。你知道吗? – 2012-08-10 09:07:58

+0

我的意思是你的自定义排序背后的逻辑是什么?因为在这种情况下,重点看起来很方便,但在其他方面会有所不同。你可以提高你的结果,这将导致它总是出现。但是,如果没有任何规则集,这将是没有意义的,也不是通用的。 – Jayendra 2012-08-10 09:37:06

回答

0

在这种情况下,我不认为这是可能的,因为作者是一个多值字段,因为有2个值:名字和姓氏。 所以,如果你想通过姓订购,你要这个领域分成2个领域:通过使用数据导入处理程序 AUTHOR_FIRST_NAME,author_surname

您可以在索引时间分割名称,例如。

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

点(在任何情况下)是找到的surename是什么,因为并不是每一个名字只由2名,像Docotor Tommy Chenkim jong il的 - 也有存在的姓氏由2名(特别是在亚洲)。

这是真正的问题,我认为。

+0

嗯..至少,你如何筛选后的单值字段? – 2012-08-10 09:10:09

+0

fq = title:*创新*&排序=作者desc看看这个:http://wiki.apache.org/solr/CommonQueryParameters#sort – 2012-08-10 09:17:46

+0

不,没有放置排序将放置'wayne'在顶部。只是简单的A〜Z顺序。 – 2012-08-10 09:19:07

4

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

你可能需要类似:

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

这产生了具有标题中包含“创新”,这些得分匹配“韦恩”更高的所有文件。

确保“作者”用WhitespaceTokenizer被索引(相对于KeywordTokenizer),否则您将无法使用分开的话(见http://wiki.apache.org/solr/AnalyzersTokenizersTokenFilters)进行查询。