1

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

  • innovationtitle字段中过滤
    (所以我们在那里有 3 条记录)
  • 然后,通过将author:放在顶部对结果进行排序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*

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

4

2 回答 2

4

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

你可能需要类似的东西:

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

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

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

于 2012-08-10T10:01:26.923 回答
0

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

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

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

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

这是真正的问题,我想。

于 2012-08-10T08:56:14.730 回答