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 <[email protected]>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 > [email protected] 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 > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users >
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
