@@ -724,12 +724,35 @@ class ElasticsearchPlugin(application: Application) extends Plugin {
724724
725725 /** Create appropriate search object based on operator */
726726 def parseMustOperators (builder : XContentBuilder , key : String , value : String , operator : String ): XContentBuilder = {
727+ // TODO: Other date fields may need handling like this? ES always appends 00:00:00 if missing, breaking some things
728+ val startdate = if (value.length == 10 ) value+ " T00:00:00.000Z" else value
729+ val enddate = if (value.length == 10 ) value+ " T23:59:59.999Z" else value
727730 operator match {
728731 case " ==" => builder.startObject().startObject(" match_phrase" ).field(key, value).endObject().endObject()
729- case " <" => builder.startObject().startObject(" range" ).startObject(key).field(" lt" , value).endObject().endObject().endObject()
730- case " >" => builder.startObject().startObject(" range" ).startObject(key).field(" gt" , value).endObject().endObject().endObject()
731- case " <=" => builder.startObject().startObject(" range" ).startObject(key).field(" lte" , value).endObject().endObject().endObject()
732- case " >=" => builder.startObject().startObject(" range" ).startObject(key).field(" gte" , value).endObject().endObject().endObject()
732+ case " <" => {
733+ if (key== " created" )
734+ builder.startObject().startObject(" range" ).startObject(key).field(" lt" , startdate).endObject().endObject().endObject()
735+ else
736+ builder.startObject().startObject(" range" ).startObject(key).field(" lt" , value).endObject().endObject().endObject()
737+ }
738+ case " >" => {
739+ if (key== " created" )
740+ builder.startObject().startObject(" range" ).startObject(key).field(" gt" , enddate).endObject().endObject().endObject()
741+ else
742+ builder.startObject().startObject(" range" ).startObject(key).field(" gt" , value).endObject().endObject().endObject()
743+ }
744+ case " <=" => {
745+ if (key== " created" )
746+ builder.startObject().startObject(" range" ).startObject(key).field(" lte" , enddate).endObject().endObject().endObject()
747+ else
748+ builder.startObject().startObject(" range" ).startObject(key).field(" lte" , value).endObject().endObject().endObject()
749+ }
750+ case " >=" => {
751+ if (key== " created" )
752+ builder.startObject().startObject(" range" ).startObject(key).field(" gte" , startdate).endObject().endObject().endObject()
753+ else
754+ builder.startObject().startObject(" range" ).startObject(key).field(" gte" , value).endObject().endObject().endObject()
755+ }
733756 case " :" => {
734757 if (key == " _all" )
735758 builder.startObject().startObject(" regexp" ).field(" _all" , wrapRegex(value)).endObject().endObject()
@@ -740,6 +763,8 @@ class ElasticsearchPlugin(application: Application) extends Plugin {
740763 val cleaned = if (! value.startsWith(" metadata." )) " metadata." + value else value
741764 builder.startObject().startObject(" bool" ).startArray(" must_not" ).startObject()
742765 .startObject(" exists" ).field(" field" , cleaned).endObject().endObject().endArray().endObject().endObject()
766+ } else if (key == " created" ) {
767+ builder.startObject.startObject(" range" ).startObject(key).field(" gte" , startdate).field(" lte" , enddate).endObject.endObject.endObject
743768 } else {
744769 val cleaned = value.replace(" :" , " \\ :" ) // Colons have special meaning in query_string
745770 builder.startObject().startObject(" query_string" ).field(" default_field" , key)
@@ -901,7 +926,7 @@ class ElasticsearchPlugin(application: Application) extends Plugin {
901926 }
902927
903928 // If a term is specified that isn't in this list, it's assumed to be a metadata field
904- val official_terms = List (" name" , " creator" , " email" , " resource_type" , " in" , " contains" , " tag" , " exists" , " missing" )
929+ val official_terms = List (" name" , " creator" , " created " , " email" , " resource_type" , " in" , " contains" , " tag" , " exists" , " missing" )
905930
906931 // Create list of (key, operator, value) for passing to builder
907932 val terms = ListBuffer [(String , String , String )]()
@@ -932,6 +957,9 @@ class ElasticsearchPlugin(application: Application) extends Plugin {
932957 else if (mt == " in" ) currkey = " child_of"
933958 else if (mt == " contains" ) currkey = " parent_of"
934959 else if (mt == " creator" ) currkey = " creator_name"
960+ else if (mt == " created" ) {
961+ currkey = " created"
962+ }
935963 else if (mt == " email" ) currkey = " creator_email"
936964 else if (! official_terms.contains(mt)) currkey = " metadata." + mt
937965 else
0 commit comments