2015-01-16 12 views
5

Ho bisogno di conoscere la posizione del documento nei risultati Solr. Lasciami spiegare perché. Vogliamo mostrare alla posizione dell'utente il suo oggetto nella ricerca (in modo che l'utente possa acquistare la promozione e spostarla). Ora interrogare su tutte le pagine finché non trovo il documento, ma genera molte chiamate a Solr. C'è un modo per ottenere id e interrogare la posizione dell'elemento? Preferibilmente dalla lista degli id ​​in modo che io possa interrogarla in un colpo solo.Posizione del documento nella serie di risultati in Solr

interrogazione Esempio: documento

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

Esempio:

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

Hai visto [questa risposta] (http://stackoverflow.com/questions/4594218/solr-search-results-and-retrieving-position-of-document)? Oppure [questo] (http://stackoverflow.com/questions/12666521/ranking-or-position-of-a-solr-document-in-search-results)? – mindas

+0

@mindas Ho visto entrambi, non sono stato in grado di estrarre da loro alcuna soluzione utilizzabile. Se puoi, per favore, ti assegnerò taglie subito. – Andrey

+0

È possibile aggiungere un documento di esempio nella domanda? Più precisamente i tuoi documenti sono ordinati in base a un campo numerico? –

risposta

3

Si sta ordinando per "sort_time" che assomiglia a un timestamp in milis.

Facciamo quanto segue: interrogare tutti i risultati che hanno un "sort_time" tra 1421747930 e NOW con una query di intervallo. Questo ti darà un numero "di conteggio" di risultati anche nel primo set di risultati. Se ordini per "sort_time desc" la tua posizione desiderata è "count" poiché il tuo risultato sarà l'ultimo nella query dell'intervallo. Prova la stessa query aggiungendo un "sort_time: [1421747930 TO NOW]" per esempio (questa potrebbe non essere la sintassi esatta, dai un'occhiata). Se ottieni un totale di 137 risultati, la posizione di 1421747930 sarà 137. A Myeb hai bisogno del massimo "tempo di ordinamento" invece di ORA ecc ... Spero tu abbia l'idea.

Ora si invia una seconda query con l'id esatto per ottenere il resto dei dati.

Si ottiene quello che vuoi con 2 query però. Ti suggerirei di giocare con l'idea di serie per ottenere ciò di cui hai bisogno.

+0

Questa è davvero un'idea eccellente, ci proverò. – Andrey

+1

Funziona perfettamente, questa è una soluzione piuttosto semplice, perché non l'ho inventata io :) Ti assegnerò un premio con grande piacere. – Andrey

0

ho usato qui di seguito l'approccio di passare elenco di id in un solo colpo a solr criteri di ricerca

primo processo l'idlist su lato java e creare una stringa di query come

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

Ciò restituirà solo 3 elementi e non mostrerà la loro posizione nella query generale – Andrey

+0

Sì, in questo modo è possibile ottenere n documenti in base alla lista di id dei documenti. Per la posizione del documento dai risultati di ricerca è possibile implementare qualcosa come l'elenco iteratore per ottenere la posizione dell'oggetto risultato – ManojP

+0

Come posso passare Ids a trovare la posizione nella ricerca? – Andrey

0

La posizione dell'elemento nel risultato della ricerca dipende dal suo punteggio che non è univoco, quindi non è possibile recuperare esattamente la posizione in base alla posizione nel risultato della ricerca. Ma è possibile limitare la richiesta e ordinare gli elementi in base al punteggio: CommonQueryParameters

Problemi correlati