6
votes

Position du document dans le résultat défini dans SOLR

Je dois connaître la position du document dans les résultats SOLR. Laisse moi expliquer pourquoi. Nous voulons montrer à la position utilisateur de son article à la recherche (afin que l'utilisateur puisse acheter une promotion et le déplacer). Maintenant, je demande à toutes les pages jusqu'à ce que je trouve le document, mais cela génère beaucoup d'appels à Solr. Est-il possible de passer par ID et la position de la requête de l'élément? De préférence par la liste des identifiants afin que je puisse la questionner en une fois.

requête d'échantillon: xxx

exemple document: xxx


8 commentaires

Avez-vous vu Cette réponse ? Ou Ce ?


@mindas je les ai déjà vus, je n'ai pas pu extraire de solutions utilisables d'eux. Si vous le pouvez - s'il vous plaît, je vous récompenserai de Bounty immédiatement.


Pouvez-vous ajouter un exemple de document dans la question? Plus au point, vos documents sont-ils commandés par un champ numérique?


Combien de documents sont dans l'index?


@Ioncojocaru Check Update s'il vous plaît


@cheffe au total quelque part environ 4 millions.


HM, votre requête d'échantillon est un peu déroutante. Vous triez par trier_time , alors pourquoi ne pas compter tous les documents qui ont un temps de tri plus grand / plus petit?


@cheffe qui est la requête de recherche qui est utilisée pour présenter des données à l'utilisateur. Je veux pouvoir déterminer la position du document dans cette requête.


3 Réponses :


0
votes

J'ai utilisé ci-dessous une approche de transmission de la liste d'identité dans un coup sur la requête de recherche SOLR

Première processus d'identité sur le côté Java et crée une chaîne de requête quelque chose comme xxx


3 commentaires

Cela viennera simplement 3 articles et ne pas montrer leur position dans la requête générale


Oui, de cette façon, vous pouvez obtenir n documents basé sur la liste des identités doc. Pour la position du document à partir du résultat de la recherche, vous pouvez implémenter quelque chose comme liste Itérateur pour obtenir la position de l'élément de résultat


Comment puis-je passer en position de sortie de l'IDS à la recherche?



0
votes

La position de l'élément dans le résultat de la recherche dépend de son score qui n'est pas unique, vous ne pouvez donc pas récupérer exactement l'élément de la position de la recherche. Mais vous pouvez limiter votre demande et trier les éléments par score: CommonqueryParamètres


0 commentaires

4
votes

Vous triez par "trier_time" qui ressemble à un horodatage dans les milis.

Effectuons les suivantes: Querez tous les résultats qui ont un "Time_Time" entre 1421747930 et maintenant avec une requête de gamme. Cela vous donnera un nombre de résultats «Count», même dans les premiers Resultins. Si vous commandez par «Sort_Time Desc», votre position souhaitée est «Comptez», car votre résultat sera la dernière dans la requête de cette plage. Essayez la même requête Ajout d'un "Sort_Time: [1421747930 à l'heure actuelle]" Par exemple (cela pourrait ne pas être la syntaxe exacte, vérifier). Si vous obtenez un total de 137 résultats, la position de 1421747930 sera 137. Vous avez besoin du Max "Sort_Time" au lieu d'aujourd'hui, etc. J'espère que vous obtenez l'idée.

Vous publiez maintenant une deuxième requête avec l'ID exact pour obtenir le reste des données.

Vous obtenez ce que vous voulez avec 2 questions cependant. Je vous suggère de jouer avec l'idée de gammes pour obtenir ce dont vous avez besoin.


1 commentaires

Cela fonctionne parfaitement, c'est une solution plutôt simple, pourquoi ne l'ai-je pas venu devenu moi-même :) Vous accordant une prime avec un grand plaisir.