<font size=2 face="sans-serif">so you are using drools to build on-the-fly
queries based on user input. You could probably do this via &quot;static&quot;
rules. Since you basically have 4 variables (</font><tt><font size=2>price,
avg_user_rating, num_ratings, category), you could write 4 rules, one each
that filters based on one of the 4 variables and then chain the execution
through salience:</font></tt>
<br>
<br><tt><font size=2>rule price:</font></tt>
<br><tt><font size=2>salience 1</font></tt>
<br><tt><font size=2>when </font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp; &nbsp; $p: Product(price
in param)</font></tt>
<br><tt><font size=2>then</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp; &nbsp; add $p to result</font></tt>
<br>
<br><tt><font size=2>rule avg_user_rating:</font></tt>
<br><tt><font size=2>salience 2</font></tt>
<br><tt><font size=2>when</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp; &nbsp; $p: Product(avg_user_rating
&gt; param)</font></tt>
<br><tt><font size=2>then</font></tt>
<br><tt><font size=2>&nbsp; &nbsp; &nbsp; &nbsp; add $p to result</font></tt>
<br>
<br>
<br><tt><font size=2>and so on</font></tt>
<br>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">soumya_sd &lt;soumya_sd@yahoo.com&gt;</font>
<br><font size=1 color=#5f5f5f face="sans-serif">To: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">rules-users@lists.jboss.org,
</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date: &nbsp; &nbsp; &nbsp;
&nbsp;</font><font size=1 face="sans-serif">05/09/2012 08:43 AM</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">Re: [rules-users]
Is there a faster way of doing this in Drools ?</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Sent by: &nbsp; &nbsp;
&nbsp; &nbsp;</font><font size=1 face="sans-serif">rules-users-bounces@lists.jboss.org</font>
<br>
<hr noshade>
<br>
<br>
<br><tt><font size=2><br>
Vincent Legendre wrote<br>
&gt; <br>
&gt; Users changing rules IS the correct use-case of drools (I would even
say<br>
&gt; that if rules never change, drools is likely to be worse than pure
java).<br>
&gt; What others said is &quot;changing the rules at each request by regenerating<br>
&gt; and recompiling&quot; is not.<br>
&gt; <br>
&gt; I can't imagine that users may change rules at each request, so you
must<br>
&gt; have, at least for some time (thus a lot of requests), a stable rule
base.<br>
&gt; What is costly is to compile rules, but you already know that.<br>
&gt; So the idea is to keep in some kind of cache the actual rules, and
only<br>
&gt; recompile them when they change.<br>
&gt; <br>
&gt; The source of rules does not matter : you can generate the DRL according<br>
&gt; to your configuration, or make you users directly write rules (with<br>
&gt; guvnor, which will fits well if your rules are only basic filters).<br>
&gt; <br>
&gt; The optimisation you have to do is to keep your compiled rules somewhere<br>
&gt; (by serializing your KnowlegdePackages or simply keep it in a kind
of<br>
&gt; map), and reuse it until your source change : you have to find a way
to<br>
&gt; detect that rules (or the config that is used to generate them) have<br>
&gt; changed, and then recompile a new up-to-date KnowledgePackage.<br>
&gt; <br>
&gt; <br>
<br>
Thank you for your insights. <br>
<br>
At this point I'm designing for the worst case i.e., I'm assuming the rules<br>
with change with every request. <br>
<br>
Moreover, this can happen on a regular basis in the system I'm trying to<br>
design. <br>
<br>
Product<br>
{ <br>
 &nbsp;price<br>
 &nbsp;ave_user_rating<br>
 &nbsp;num_ratings<br>
 &nbsp;category <br>
 &nbsp;<br>
} <br>
<br>
User wants to see Product with with the following rules <br>
<br>
at t=t_1 : If product.category in {A,B}. <br>
<br>
at t=t_2 : If product.category in {A,B} AND price &lt; 100 <br>
<br>
at t=t_3 : &nbsp;If product.category in {A,B} &nbsp;AND price &lt; 100
AND num_ratings &gt;<br>
100 <br>
<br>
You can imagine the user changing these rules in a span of less than a<br>
minute. <br>
<br>
I understand that Drools is designed for cases when rules changes often.
But<br>
can it support something like the one I described above where rules are<br>
changing at a much faster rate? <br>
<br>
<br>
Thanks. <br>
<br>
<br>
<br>
<br>
<br>
<br>
--<br>
View this message in context: </font></tt><a href="http://drools.46999.n3.nabble.com/Is-there-a-faster-way-of-doing-this-in-Drools-tp3973888p3974483.html"><tt><font size=2>http://drools.46999.n3.nabble.com/Is-there-a-faster-way-of-doing-this-in-Drools-tp3973888p3974483.html</font></tt></a><tt><font size=2><br>
Sent from the Drools: User forum mailing list archive at Nabble.com.<br>
_______________________________________________<br>
rules-users mailing list<br>
rules-users@lists.jboss.org<br>
</font></tt><a href="https://lists.jboss.org/mailman/listinfo/rules-users"><tt><font size=2>https://lists.jboss.org/mailman/listinfo/rules-users</font></tt></a><tt><font size=2><br>
</font></tt>
<br>

-----------------------------------------
The information contained in this communication (including any
attachments hereto) is confidential and is intended solely for the
personal and confidential use of the individual or entity to whom
it is addressed. If the reader of this message is not the intended
recipient or an agent responsible for delivering it to the intended
recipient, you are hereby notified that you have received this
communication in error and that any review, dissemination, copying,
or unauthorized use of this information, or the taking of any
action in reliance on the contents of this information is strictly
prohibited. If you have received this communication in error,
please notify us immediately by e-mail, and delete the original
message. Thank you