Comment faire une requête de score constante dans Solr
-
10-10-2019 - |
Question
J'utilise SolrNet d'accéder à un index Solr où j'ai un champ à valeurs multiples appelés « tags ». Je veux effectuer la requête pseudo-code suivant:
(tags: pile) ^ 10 OR (tags: plus de 5) ^ OR (tags: flux) ^ 2
où le terme « pile » est stimulée par 10 «sur » est dynamisée par 5 et « flux » est dynamisée par 2. Le résultat est que je suis après que les résultats avec « pile » apparaît plus élevé que ceux qui "flux", etc.
Le problème que je vais avoir est que dire « flux » apparaît seulement dans quelques documents, mais « pile » apparaît dans les charges, puis en raison d'une forte valeur de idf, des documents avec apparaissent au-dessus les « flux » avec « pile ».
Lorsque ce projet était en Lucene, a été mis en œuvre directement j'ai utilisé ConstantScoreQuery et ceux-ci a éliminé le idf sur la base du score uniquement sur la valeur de boost.
Comment cela peut-il être réalisé avec Solr et SolrNet, où je suis effectivly simplement passer Solr une chaîne de requête? Si elle ne peut pas, est-il une autre façon que je peux aborder ce problème?
Merci à l'avance!
La solution
Je ne pense pas exprimer là aucune façon directement un ConstantScoreQuery dans Solr, mais il semble que gamme et les requêtes préfixe utilisation ConstantScoreQuery sous le capot , de sorte que vous pouvez essayer de truquer une requête de gamme, par exemple tags:[flow TO flow]
Sinon, vous pouvez mettre en œuvre votre propre Solr QueryParser.
Autres conseils
Solr 5.1 et versions ultérieures a ce dans la syntaxe de l'analyseur de requêtes via l'opérateur ^ =.
Il suffit donc de prendre votre requête d'origine: (Tags: pile) ^ 10 OR (tags: plus de 5) ^ OR (tags: flux) ^ 2
Et remplacer le ^ avec ^ = changement de boosté à la constante: (Tags: pile) ^ = 10 OR (tags: over) ^ = 5 OR (tags: débit) = ^ 2