Search Smith

ColdFusion, SQL queries, and, of course, searching

Archive for January, 2012

ColdFusion 9: Preserving sort order with structs

Posted by David Faber on January 28, 2012

In a previous post I talked about using structs to avoid using CFQUERY inside a query loop. Structs are also useful if you need to return your data in JSON format (of course, ColdFusion can return query objects in JSON format as well, but I think this format can be difficult to use if you’re using something other than ColdFusion to read it back in). In this vein, it would be helpful if structs retained sort order. This helpful blog post shows how to do just that.

Posted in ColdFusion | Tagged: , , , | Leave a Comment »

ColdFusion 9 and Solr: MultiValued fields vs. Tokenized

Posted by David Faber on January 17, 2012

I was indexing a new collection yesterday and kept getting out of memory errors from the JVM (in truth, I don’t know if they were from JRun or from whatever JVM Solr was running in). Apparently either CF didn’t like the huge array I was generating, or Solr didn’t like me trying to cram it into a multiValued field of type slong. I decided to try something different – I created a space-delimited list of terms instead (they were all numbers, so no need to worry about phrases or anything like that). That worked great.

According to this question/answer thread on StackOverflow, there should not be a difference in results if that field is used for filtering. There may be a difference in scoring, but as I was only using the field for filtering anyway, that is not a concern.

Posted in ColdFusion, Solr | Tagged: , , , | Leave a Comment »

ColdFusion 9 and Solr: Unusual behavior

Posted by David Faber on January 16, 2012

Over the past week, a colleague of mine and I have noticed some unusual behavior when indexing Solr collections with ColdFusion. We have not been able to figure out the reasons for this behavior, it’s just something we’ve observed. First, the ListToArray() function does not seem to create arrays that are usable with Solr. This behavior has been observed with multiValue fields of both slong and string types. One can get around this by creating a new array, looping over the list, and adding the list elements to the array one by one.

Second, and this is more interesting (confusing?), populating a Solr multiValue field with a ColdFusion array only seems to work properly when a new array is created (using ArrayNew()) for each record being indexed. (I have not tried using implicit array creation (i.e., <cfset recordArr = [] />), so I can’t confirm that this works as well, although there is no reason it shouldn’t.*) Using the same array variable with the ArrayClear() function and repopulating for each record does not work. I can’t think of any explanation for this that actually makes sense.

Third, as I noted before, there are probably typing issues between ColdFusion and Solr that can cause issues as well. The JavaCast() function is helpful in resolving these.

*Update: Implicit array creation does work.

Posted in ColdFusion, Solr | Tagged: , , , , , , , , | Leave a Comment »