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!

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top