95% of searches are not complex and typically involve a single value being searched for.  I am proposing some additional functionality provided for searching via API calls.  These could also be exposed through the UI, but that is not the purpose of this proposal.

Simple Fuzzy searches will support broad searches across Clowder for anything and everything that contains the search value.  (option...this could also include tags, but I do not give that in the examples because I think tags might be something "different")

Simple Meta-Data searches cover the typical meta-data search pattern of term=value with the added feature of being able to control the "context" in a easy, semi-intuitive way.

Simple Fuzzy Search

Simple fuzzy search - Returns any space, dataset, collection, folder or file with a name... or... dataset or file with a meta-data value... that contains the text "bar"

/api/fuzzysearch?value=bar

Simple Space fuzzy search - Returns any dataset, collection, folder or file with a name... or... dataset/file with a meta-data value... that contains the text "bar"

/api/fuzzysearch/space/{spaceid}?value=bar

Simple Dataset fuzzy search - Returns any folder or file with a name... or... file with a meta-data value... that contains the text "bar"

/api/fuzzysearch/dataset/{datasetid}?value=bar

Simple Folder fuzzy search - Returns any file with a name... or... file with a meta-data value... that contains the text "bar"

/api/fuzzysearch/folder/{folderid}?value=bar

Simple Collection fuzzy search - Returns any dataset or file with a name... or... dataset or file with a meta-data value... that contains the text "bar"

/api/fuzzysearch/collection/{collectionid}?value=bar

Simple Dataset fuzzy search - Returns any dataset with a name or a meta-data value that contains the text "bar"

/api/fuzzysearch/datasets?value=bar

Simple File fuzzy search - Returns any file with a name or a meta-data value that contains  the text "bar"

/api/fuzzysearch/files?value=bar


Simple Meta-Data Search

Simple meta-data search - Returns any dataset or file with a meta-data value that equals the text "bar"

/api/search?term=foo&value=bar
note: if the term is valid at both the instance level and one or more space levels...all occurances are searched.

Simple Space meta-data search - Returns any dataset or file with a meta-data value that equals the text "bar"

/api/search/space/{spaceid}?term=foo&value=bar
note: if the term is valid at both the instance level and the space level...both occurances are searched.

Simple Dataset meta-data search - Returns any file with a meta-data value that equals the text "bar"

/api/search/dataset/{datasetid}?term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...both occurrences are searched.

Simple Folder meta-data search - Returns any file with a meta-data value that equals the text "bar"

/api/search/folder/{folderid}?term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the folder is in a dataset that is associated to a space)...both occurrences are searched.

Simple Collection meta-data search - Returns any dataset or file with a meta-data value... that equals the text "bar"

/api/search/collection/{collectionid}?term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...both occurrences are searched.

Simple Dataset meta-data search - Returns any dataset with a meta-data value... that equals the text "bar"

/api/search/datasets?term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...both occurrences are searched.

Simple Files meta-data search - Returns any file with a meta-data value... that equals the text "bar"

/api/search/files?term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...both occurrences are searched.


Simple Context Meta-Data Search (example of context include, but are not limited to, "instance" and "space")

Simple context meta-data search - Returns any dataset or file with a instance based meta-data value that equals the text "bar"

/api/search?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and one or more space levels...only the instance level is searched.

/api/search?context=space&term=foo&value=bar
note: this search, while syntactically valid, will always return nothing.

Simple Space context meta-data search - Returns any dataset or file with a meta-data value that equals the text "bar"

/api/search/space/{spaceid}?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level...only the instance level is searched.

/api/search/space/{spaceid}?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level...only the space level is searched.

Simple Dataset context meta-data search - Returns any file with a meta-data value that equals the text "bar"

/api/search/dataset/{datasetid}?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...only the instance level is searched.

/api/search/dataset/{datasetid}?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the dataset is associated to a space)...only the space level is searched.

Simple Folder context meta-data search - Returns any file with a meta-data value that equals the text "bar"

/api/search/folder/{folderid}?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the folder is in a dataset that is associated to a space)...only the instance level is searched.

/api/search/folder/{folderid}?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level (if the folder is in a dataset that is associated to a space)...only the space level is searched.

Simple Collection context meta-data search - Returns any dataset or file with a meta-data value... that equals the text "bar"

/api/search/collection/{collectionid}?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the dataset in the collection is associated to...only the instance level is searched.

/api/search/collection/{collectionid}?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the dataset in the collection is associated to...only the space levels for each dataset are searched.

Simple Dataset context meta-data search - Returns any dataset with a meta-data value... that equals the text "bar"

/api/search/datasets?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the dataset is associated to...only the instance level is searched.

/api/search/datasets?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the dataset is associated to...only the space level is searched.

Simple File context meta-data search - Returns any file with a meta-data value... that equals the text "bar"

/api/search/files?context=instance&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the file is associated to...only the instance level is searched.

/api/search/files?context=space&term=foo&value=bar
note: if the term is valid at both the instance level and the space level of the space the file is associated to...only the space level is searched.