文档在 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 个查询获得所需的信息。我建议您尝试使用范围的概念来获得您需要的东西。
我需要知道文档在 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 个查询获得所需的信息。我建议您尝试使用范围的概念来获得您需要的东西。