2015-01-16 21 views
5

Belgenin konumunu Solr sonuçlarında bilmem gerek. Nedenini açıklayayım. Aramadaki öğesinin kullanıcı konumuna gösterilmesini istiyoruz (böylece kullanıcı promosyon satın alabilir ve yukarı taşıyabilir). Şimdi belgeyi bulana kadar tüm sayfaları sorguladım, ancak Solr'a çok fazla çağrı geliyor. Öğenin kimliğine ve sorgu konumuna göre bir yol var mı? Tercihen, bir seferde sorgulayabilmem için kimlik listesiyle.Sonuç olarak ayarlanan belgenin konumu Solr

Örnek sorgu:

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

Örnek belge:

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

[Bu cevap] 'ı gördünüz mü (http://stackoverflow.com/questions/4594218/solr-search-results-and-retrieving-position-of-document)? Veya [bu] (http://stackoverflow.com/questions/12666521/ranking-or-position-of-a-solr-document-in-search-results)? – mindas

+0

@mindas İkisini de gördüm, onlardan kullanılabilir çözümler elde edemedim. Eğer yapabilirsen - lütfen hemen ödül vereceğim. – Andrey

+0

Soruya örnek bir belge ekleyebilir misiniz? Daha çok, sayısal alanla sipariş edilen belgeleriniz var mı? –

cevap

3

Milis'te zaman damgası gibi görünen "sort_time" ile sıralama yapıyorsunuz.

Aşağıdakileri yapalım: 1421747930 ile NOW aralığı aralığına sahip "sort_time" olan tüm sonuçları sorgulayın. Bu, ilk sonuç kümesinde bile size bir "sayı" sonucu verecektir. "Sort_time desc" ile sipariş verirseniz, sonucunuz o aralıktaki sorgudaki son sonuç olarak istenen konum "sayılır". Aynı sorguyu "sort_time: [1421747930 TO NOW]" ekleyerek deneyin (örneğin, bu tam bir sözdizimi olmayabilir, kontrol edin). Toplam 137 sonuç alırsanız, 1421747930 pozisyonu 137 olacaktır. Myeb, ŞİMDİ vb. Yerine max "sort_time" a ihtiyacınız var. Umarım bu fikri alırsınız.

Artık verilerin geri kalanını almak için tam kimliğe sahip ikinci bir sorgu oluşturuyorsunuz.

Yine de 2 sorgu ile istediğiniz şeyi alırsınız. İhtiyacınız olanı almak için aralıklar fikriyle oynamanızı öneririm.

+0

Bu aslında mükemmel bir fikir, deneyeceğim. – Andrey

+1

Bu mükemmel çalışıyor, bu oldukça basit bir çözüm, neden kendimle gelmedim :) Büyük bir zevkle size bir ödül verdim. – Andrey

0

Ben Solr arama sorgusuyla tek atışta

İlk sürecini üzerindeki idlist id listesini iletmek yaklaşım aşağıda kullanmış java tarafı ve sorgu dizesini

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

Bu sadece 3 öğe döndürecek ve genel sorgu – Andrey

+0

konumunda konumlarını göstermeyecektir Evet, bu şekilde doc kimlik listesine göre n belgeleri alabilirsiniz. Arama sonucundan belge konumu için, sonuç öğesinin konumunu almak için liste yineleyicisi gibi bir şey uygulayabilirsiniz – ManojP

+0

Ids öğesini geçerek nasıl arama yapabilirim? – Andrey

0

Arama sonuçlarındaki öğenin konumu, benzersiz olmayan puanına bağlıdır. Bu nedenle, öğeyi arama sonucuna göre tam olarak alamazsınız. Ancak isteğinizi sınırlandırabilir ve öğelere sıralayabilirsin: CommonQueryParameters