在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*
但我不知道第二步的查询(自定义排序)
我怎么能得到它?
答案 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 Chen
或kim jong il
- 也存在姓氏由2组成名字(特别是在亚洲)。
我认为这是真正的问题。