文档在 Solr 中结果集中的位置

Position of document in result set in Solr

我需要知道文档在 Solr 结果中的位置。让我解释一下为什么。我们想向用户显示他的项目在搜索中的位置(以便用户可以购买促销并将其向上移动)。现在我查询所有页面直到找到文档,但它会生成大量对 Solr 的调用。有没有办法通过元素的id和查询位置来获取?最好通过 ID 列表,以便我可以一次查询它。

示例查询:

/search?sort=sort_time%20desc&fq=category_parent_id:2003&rows=15&q=&start=0

示例文档:

{
    sort_time: 1421747930,
    id: 146002852,
    catlevel2: "Volvo",
    catlevel1: "Auto's",
    description: "Volvo XC90",
    score: 6.4758344
}

我使用以下方法将 id 列表一次性传递给 solr 搜索查询

首先处理 java 端的 idlist 并使查询字符串类似于

String qry = "id:1 OR id:2 OR id:6"
SolrQuery solrQry         = new SolrQuery();
solrQry.set("q", qry);

SolrServer solrServer = new HttpSolrServer(SOLR_SERVER_URL);
QueryResponse response =  solrServer.query(solrQuery);          

项目在搜索结果中的位置取决于它的分数,它不是唯一的,因此您不能通过它在搜索结果中的位置来准确检索项目。 但您可以限制您的请求并按分数对项目进行排序:CommonQueryParameters

您正在按 "sort_time" 排序,这看起来像是以 milis 为单位的时间戳。

让我们执行以下操作:使用范围查询查询在 1421747930 和 NOW 之间具有 "sort_time" 的所有结果。即使在第一个结果集中,这也会为您提供 "count" 个结果。如果您按 "sort_time desc" 排序,您想要的位置是 "count",因为您的结果将是该范围查询中的最后一个。例如,尝试添加一个 "sort_time:[1421747930 TO NOW]" 的相同查询(这可能不是确切的语法,请检查一下)。如果您总共获得 137 个结果,则 1421747930 的位置将为 137。Myeb,您需要最大值 "sort_time" 而不是 NOW 等...我希望您明白了。

现在您使用确切的 ID 发出第二个查询以获取其余数据。

不过,您可以通过 2 个查询获得所需的信息。我建议您尝试使用范围的概念来获得您需要的东西。