I must be missing something. If you want to check if all the three strings
are present in each array, why are you using OR (||)?
If you don't want to model the array as a class containing the "parent"
reference and insert them as facts, you can try this:
MyContext(classes contains "TestString1" && contains
"TestString2" &&
contains "TestString3")
Best Regards,
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Esteban Aliverti
- Developer @
http://www.plugtree.com
- Blog @
http://ilesteban.wordpress.com
On Wed, Sep 29, 2010 at 12:17 PM, Swindells, Thomas <TSwindells(a)nds.com>wrote:
> Thomas, Thanks for the suggestions.
>
> Swindells, Thomas wrote:
> >
> > Also have you tried just using ==, eg exists( String(this ==
> > "TestString1") || String(this == "TestString2") ||
String(this ==
> > "TestString3") from DclassesList)
> >
>
> This did reduce the time by about 50 ms.
That's a step in the right direction at least.
> Swindells, Thomas wrote:
> >
> >
> > You may also want to consider whether it would be beneficial to
> > restructure your fact class to get rid of the from, and match against
> > ClassName facts instead - this may give you a big performance gain as
it
> > means each rule wouldn't have to iterate over the list, if you are
> > updating MyContext then this gain is likely to be even bigger.
> >
>
> Not quite sure about what you mean by "match against ClassName facts
instead
> ". My fact class will have a bunch of instance variables one of which is
> the array of strings.
> Would be great if you could elaborate that a bit.
Have two fact classes,
One is your current fact class (MyContext), the other is to represent each
of your classes entry.
Eg:
Class ClassName {
MyContext parent;
String name;
...
}
When inserting you MyContext into the working memory you would also add a
ClassName fact for each entry of the classes list (you could either do this
in code or have a rule which does it for you).
Your main rules would then look something like the following:
Rule XYZ
$parent : MyContext
exists ( ClassName(parent == $parant, name == "TestString1") or
ClassName(parent == $parant, name == "TestString2") or ClassName(parent ==
$parant, name == "TestString3"))
then
...
If you only ever have one MyContext in working memory you can skip the
parent check.
You may also be able to use in to simplify things
exists ( ClassName(parent == $parant, name in {"TestString1",
"TestString2", "TestString3"))
Hope that makes sense,
Thomas
**************************************************************************************
This message is confidential and intended only for the addressee. If you
have received this message in error, please immediately notify the
postmaster(a)nds.com and delete it from your system as well as any copies.
The content of e-mails as well as traffic data may be monitored by NDS for
employment and security purposes. To protect the environment please do not
print this e-mail unless necessary.
NDS Limited. Registered Office: One London Road, Staines, Middlesex, TW18
4EX, United Kingdom. A company registered in England and Wales. Registered
no. 3080780. VAT no. GB 603 8808 40-00
**************************************************************************************
_______________________________________________
rules-users mailing list
rules-users(a)lists.jboss.org
https://lists.jboss.org/mailman/listinfo/rules-users