2015-01-16 28 views
5

我需要知道Solr結果中文檔的位置。讓我解釋一下爲什麼。我們想要在搜索中顯示他的項目的用戶位置(以便用戶可以購買促銷並將其提升)。現在我查詢所有頁面,直到找到文檔,但它會生成很多對Solr的調用。有沒有辦法通過元素的id和查詢位置來獲取?最好通過ID列表,以便我可以一次查詢它。文檔在Solr結果集中的位置

樣品查詢:

/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 
} 
+0

你見過[這個答案](http://stackoverflow.com/questions/4594218/solr-search-results-and-retrieving-position-of-document)?或[這](http://stackoverflow.com/questions/12666521/ranking-or-position-of-a-solr-document-in-search-results)? – mindas

+0

@mindas我見過他們兩個,我無法從他們那裏提取任何可用的解決方案。如果可以的話 - 請,我會立刻獎勵你的賞金。 – Andrey

+0

您可以在問題中添加示例文檔嗎?更重要的是你的文件按數字字段排序? –

回答

3

您正在按照「sort_time」進行排序,它看起來像milis中的時間戳。

讓我們執行以下操作:使用範圍查詢查詢在1421747930和NOW之間具有「sort_time」的所有結果。即使在第一個結果集中,這也會爲您提供「計數」數量的結果。如果您通過「sort_time desc」進行排序,則您希望的位置是「count」,因爲您的結果將是該範圍查詢中的最後一個。嘗試使用相同的查詢,例如添加「sort_time:[1421747930 TO NOW]」(這可能不是確切的語法,請查看)。如果你總共得到137個結果,那麼1421747930的位置就是137. Myeb你需要最大的「sort_time」而不是NOW等等......我希望你明白。

現在您使用確切的ID發出第二個查詢以獲取其餘數據。

儘管你得到了你想要的2個查詢。我建議你玩範圍的想法來得到你需要的東西。

+0

這實際上是一個很好的主意,我會嘗試。 – Andrey

+1

這很好,這是一個相當簡單的解決方案,我爲什麼不自己想出來:)以極大的榮幸授予你賞金。 – Andrey

0

我用下面的方法來一次性通過ID列表到Solr搜索查詢

首先進程IDLIST上Java方面並使查詢字符串有點像

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);   
+0

這隻會返回3個項目,並不會在一般查詢中顯示其位置 – Andrey

+0

是的,這樣您可以根據文檔ID列表獲取n個文檔。對於搜索結果中的文檔位置,您可以實現類似列表迭代器的內容來獲取結果項目的位置 – ManojP

+0

如何通過傳遞Ids在搜索中找出位置? – Andrey

0

項目在搜索結果中的位置取決於它的分數,因爲它不是唯一的,所以您無法通過它在搜索結果中的位置準確檢索項目。 但是,您可以限制您的請求並按分數對項目進行排序:CommonQueryParameters