-
Notifications
You must be signed in to change notification settings - Fork 22
Solr User Interface Specification
- search text field difficult to use : syntax complicated
- tick a second study, subject, etc.
Need to search datasets in study1 ∪ study2 ∪ study3 ... Same for :
- studies
- subjects
- dataset name
- examination comment
- dataset modality type
- mr dataset nature
- center (new)
- do we really want to provide lists of
- dataset names
- examination comments ?
- the user should be able to download all the results once
- using asynchronous mass download
- a search by center would be useful, for splitting downloads among other reasons
- graphic changes
- editable columns width
- editable pages size
- preferences saving
Searching for dataset in study1 ∪ study2 is searching for datasets that belong to an subset composed of the union of study1 AND study2. Note that in english we say it's searching in study1 AND study2. But from a developer perspective we might want to say that it's searching dataset that belong to study1 OR study2.
In my opinion it's can be very confusing and that's why I use the ∪ / ∩ (union / intersection) operators to describe the subset of dataset we want to fetch.
- "In the SOLR research field, any keyword can be entered, without need for wildcard characters. The keywords will be searched for in all the indexes, whether series description, patient name, examination, ..."
- "To enter the keyword in the SOLR research field, it should be put clearer (tooltip other other?) how to combine keywords (AND, OR) or if they can be specific to some field (Subject=..., Dataset name=). And also indicate that no wildcard character is needed."
- It seems the intent was to feature a single text field that could work in two ways :
- A raw text search on any indexed field (the user types "subjectWhatever" or "T1" or "Rennes")
- A Solr syntax formatted query
- ??? I don't know if it could do both in a single query
3.1.1 Study name Study name criterion is a facet field. User is able to select zero, one or many study names. A checkbox is linked to each study name. Checkboxes are to the left of study name. They are vertically aligned. If no study is selected, no filter on this criterion is applied.
3.1.2 Subject name Subject name criterion is a text field. User can combine keywords (AND, OR) to refine search. A tooltip displays an information message explaining search and keywords. Message: To refine search, “AND” and “OR” keywords could be used between terms.
3.1.3 Dataset name Dataset name criterion is a text field. User can combine keywords (AND, OR) to refine search. A tooltip displays an information message explaining search and keywords. Message: To refine search, “AND” and “OR” keywords could be used between terms.
3.1.4 Dataset creation date Dataset creation date criterion allows to search datasets between two dates. So it is composed of 2 search fields: • Start date • End date These dates are defined with a calendar component.
3.1.5 Examination comment Examination comment criterion is a text field. User can combine keywords (AND, OR) to refine search. A tooltip displays an information message explaining search and keywords. Message: To refine search, “AND” and “OR” keywords could be used between terms.
- note that it makes no sense to search for datasets in Subject1 AND Subject2 as a dataset can't be in both subjects. But one can
- search for a subject named "subjectNumber* AND *FromThatStudy" in order to find a subject named "subjectNumberOneFromThatStudy"
- search for a datasets that are in Subject1 AND Study1.
- I assume it's what the message is about
- search for datasets of Subject1 OR from Study2
- I consider it to be an exceptional case
summary :
operation | between | |
---|---|---|
∩ | 2 values of a criterion | NOT RELEVANT |
∪ | 2 values of a criterion | POSSIBLE |
∩ | 2 criteria | POSSIBLE |
∪ | 2 criteria | EXCEPTIONAL |
This solution would allow a user to select multiple studies, subjects, etc, and will refresh the search criteria by hiding the values that are not present in any of the returned datasets.
- select study1
- show ds in : study1
- search options :
- study : all
- subject name : filter on study1
- dataset name : filter on study1
- examination comment : filter on study1
- dataset modality type : filter on study1
- mr dataset nature : filter on study1
- select study2
- show ds in : study1 ∪ study2
- search options :
- study : all
- subject name : filter on study1 ∪ study2
- dataset name : filter on study1 ∪ study2
- examination comment : filter on study1 ∪ study2
- dataset modality type : filter on study1 ∪ study2
- mr dataset nature : filter on study1 ∪ study2
- select dataset modality type = mr_dataset
- show ds in : (study1 ∪ study2) ∩ mr_dataset
- search options :
- study : all
- subject name : filter on (study1 ∪ study2) ∩ mr_dataset
- dataset name : filter on (study1 ∪ study2) ∩ mr_dataset
- examination comment : filter on (study1 ∪ study2) ∩ mr_dataset
- dataset modality type : filter on study1 ∪ study2
- mr dataset nature : filter on (study1 ∪ study2) ∩ mr_dataset
- select subject1
- show ds in : subject1
- search options :
- study : filter on subject1
- subject name : all
- dataset name : filter on subject1
- examination comment : filter on subject1
- dataset modality type : filter on subject1
- mr dataset nature : filter on subject1
Pros :
- the user can select multiple values of a single criterion
- the criteria values adjust so the user is suggested only the values that could refine the response
Cons :
- sometimes the user might need to see the hidden options
- technically, we might end-up with one solr search by criterion
- see the search options state at the end of the use case 1 : 3 different subsets
- all
- (study1 ∪ study2) ∩ mr_dataset
- study1 ∪ study2
- each time a criterion is used it adds a specfic request : the main riquest without the considered criterion
- see the search options state at the end of the use case 1 : 3 different subsets
- select study1
- show ds in : study1
- search options :
- study : all, study1 (size of subset) / others (0) = all (with numbers)
- dataset name : all (with numbers)
- examination comment : all (with numbers)
- dataset modality type : all (with numbers)
- mr dataset nature : all (with numbers)
- select study2
- show ds in : study1 ∪ study2
- search options : all (with numbers)
- select dataset modality type = pet_dataset
- show ds in : (study1 ∪ study2) ∩ pet_dataset
- search options : all (with numbers)
- select mr dataset nature = T1 (0)
- show ds in : (study1 ∪ study2) ∩ pet_dataset ∩ T1 ===> empty subset
- search options : all (0)
- un-select dataset modality type = pet_dataset
- show ds in : (study1 ∪ study2) ∩ T1 ===> not empty
- search options : all (with numbers)
Pros :
- more flexible for the user
- only one additional query at max
Cons :
- not easy to see the non-zero options if there are a lot of zero options around
- the numbers can be confusing
- the user might think it's the number of result you will get when you click that option but it's whan true when it comes to ∪ :
- if you select study1 then every study will be at 0
- selected options don't show the number of results you will have if you un-select it, only the current number of result (useless and confusing)
- also not relevant when your result is empty and every number is 0
- the user might think it's the number of result you will get when you click that option but it's whan true when it comes to ∪ :
Improvements :
- moving up the non-zero
- no number on selected options
- no number on every option of a criterion if this criterion has already a selected value
- don't show the zeros when the result subset is empty
Is it possible to accuratly predict the size of the subset for every single option that can be selected/unselected? Let's see a few cases.
- study1, subject1 and subject2 are selected
- studies
- study1 - [X] (subject1 ∪ subject2)
- studyX - [ ] ((study1 ∪ studyX) ∩ (subject1 ∪ subject2))
- 1 query per study !!!
- subjects
- subject1 - [X] (study1 ∩ subject2)
- subject2 - [X] (study1 ∩ subject1)
- subjectX - [ ] (study1 ∩ (subject1 ∪ subject2 ∪ subjectX))
- 1 query per subject !!!!!!
- dataset names
- datasetNameX - [ ] (nb of datasetNameX in the subset, already computed)
- no additional query
- others : same as dataset names
- studies
Pros :
- accurate and easy to use
Cons :
- one query for each value of a criterion when at least one value is already selected for this criterion
In my opinion, the solution 2 is technically the best option and ergonomically a good compromise. The solution 3 is not realistic.
Let's use the main text search input
- select study1
- select study2
- select dataset modality type = pet_dataset
- show ds in : (study1 ∪ study2) ∩ pet_dataset
- search options : all (with numbers)
- select mr dataset nature = T1 (0)
- show ds in : (study1 ∪ study2) ∩ pet_dataset ∩ T1 ===> empty subset
- search options : all (0)
- un-select dataset modality type = pet_dataset
- show ds in : (study1 ∪ study2) ∩ T1 ===> not empty
- search options : all (with numbers)
- type "T2" in the main search field
- show ds in : (study1 ∪ study2) ∩ pet_dataset ∩ "T2" // (any T2 occurence in all indexed data)
- search options : all (with numbers)
- search field : "T2"
There is no major difficulty with the addition of an input text field. The numbers can only tell how many datasets share this criterion value in the present subset.
Nevertheless, this solution doesn't provide a way to use directly the solr syntax.
Use case 5 - Same criterion with both main text input and checkboxes - using ∩ - checked one not in subset
- type
studyName:Study*;
in the main search field- study list is still displayed
- select AnotherStudy from the study list
- (study = "AnotherStudy") ∩ (study = "Study*" )
- 0 results
Use case 6 - Same criterion with both main text input and checkboxes - using ∩ - checked one in subset
- type
studyName:Study*;
in the main search field- study list is still displayed
- select Study1 from the study list
- (study = "Study1") ∩ (study = "Study*" )
- results are unchanged from the 1st step
Use cases 5 and 6 show that in this situation it's useless either to :
- use ∩
- show the list of studies
Let's see what happens if we use ∪ instead :
Use case 7 - Same criterion with both main text input and checkboxes - using ∪ - checked one not in subset
- type
studyName:Study*;
in the main search field- study list is still displayed
- select AnotherStudy from the study list
- (study = "AnotherStudy") ∪ (study = "Study*" )
- subset is extended
Use case 8 - Same criterion with both main text input and checkboxes - using ∪ - checked one in subset
- type
studyName:Study*;
in the main search field- study list is still displayed
- select Study1 from the study list
- (study = "Study1") ∪ (study = "Study*" )
- results are unchanged from the 1st step
- type
studyName:Study*;subjectName:Subject1
in the main search field- study list is still displayed
- select AnotherStudy from the study list
- ((study = "AnotherStudy") ∪ (study = "Study*" )) ∩ subject = Subject1
- subset is extended
Use cases from 5 to 8 show several possibilities :
- solution 1
- when using
studyName:XXX;
, study list is deactivated
- when using
- solution 2
- when using
studyName:XXX;
, study list is diplayed and checking studies will result in a ∪ between that study and the XXX search. - the studies that are already included in the search will not be checked. Checking them will have no effect.
- when using
Let's say we have a text input search for every criterion
- type "stud" in the studies text search
- show ds in : (study1 ∪ study2 ∪ ...)
- disable those in the study list ?
- the rest is unchanged
It's just equivalent to studyName:Study*;
in the main search.
I think it adds too much complexity because we would have to manage both criteria and the main search.
A search field could be useful to filter criteria values but it will not affect the search.
- studies
- subjects
- dataset names
- examination comments
- dataset modality types
- mr dataset natures
- centers (new)
- healthy volunteer / patient
We need to improve the way criteria are selected, knowing :
- the list of options can be very long
- it should provide a way to filter it
- it should expand and collapse (20 / 5 ?)
- the options with (0) should be at the bottom of the list
- ordered alphabetically ?
- there should be a clear button for the checkboxes
- there should be a clear button for the filter
- checked options should be visible at any moment
- options will not be removed when other criteria are updated
- checking / unchecking a checkbox will have immediate effects on the search
Default view :
+-----------------------------+
| STUDY |
| |
| % filter |
| |
| [ ] Study1 (125) |
| [ ] Study2 (12) |
| [ ] NATIVE (67) |
| [ ] USPIO (7) |
| [ ] HYDROPS (30) |
| + more... |
| total : 287 |
+-----------------------------+
Select one study
+-----------------------------+
| STUDY |
| |
| % filter |
| |
| X clear selection |
| |
| [X] Study2 |
| [ ] Study1 (0) |
| [ ] NATIVE (0) |
| [ ] USPIO (0) |
| [ ] HYDROPS (0) |
| + more... |
| total : 287 |
+-----------------------------+
Expand (click on + more...)
- a slider appears
- selected values are put aside
+-----------------------------+
| STUDY |
| |
| % filter |
| |
| X clear selection |
| |
| [X] Study2 |
| |
| [ ] Study1 (0) |■| |
| [ ] NATIVE (0) | | |
| [ ] USPIO (0) | | |
| [ ] HYDROPS (0) | | |
| [ ] Study3 (0) | | |
| [ ] MSSEG (0) | | |
| [ ] MSSEG-2 (0) | | |
| [ ] SudyFour (0) | | |
| [ ] StudyFive (0) | | |
| [ ] StudySix (0) | | |
| [ ] StudySeven (0) | | |
| [ ] StudyHeight (0) | | |
| [ ] StudyNine (0) | | |
| [ ] StudyTen (0) | | |
| [ ] StudyEleven | | |
| [ ] StudyTwelve (0) | | |
| [ ] StudyThirteen (0) | | |
| [ ] StudyFourtenn (0) | | |
| [ ] StudyFifteen (0) | | |
| [ ] StudySixteen (0) | | |
| ^ hide |
| total : 287 |
+-----------------------------+
Select more values + scroll over the list
+-----------------------------+
| STUDY |
| |
| % filter |
| |
| X clear selection |
| |
| [X] Study2 |
| [X] USPIO |
| [X] StudyThirtyThree |
| |
| [ ] StudyHeight (0) | | |
| [ ] StudyNine (0) | | |
| [ ] StudyTen (0) | | |
| [ ] StudyEleven | | |
| [ ] StudyTwelve (0) | | |
| [ ] StudyThirteen (0) |■| |
| [ ] StudyFourtenn (0) | | |
| [ ] StudyFifteen (0) | | |
| [ ] SudySixteen (0) | | |
| [ ] StudySeventeen (0)| | |
| [ ] StudyHeighteen (0)| | |
| [ ] StudyNineteen (0) | | |
| [ ] StudyTwentyOne (0)| | |
| [ ] StudyTwentyTwo (0)| | |
| [ ] StudyTwentyT...(0)| | |
| [ ] StudyTwentyF...(0)| | |
| [ ] StudyTwentyF...(0)| | |
| [ ] StudyTwentyS...(0)| | |
| [ ] StudyTwentyS...(0)| | |
| [ ] StudyTwentyH...(0)| | |
| ^ hide |
| total : 287 |
+-----------------------------+
Type something in the search field
- results are less than 20 : hide slider
- results are actually less than 5 : hide "hide" / "more..."
+-----------------------------+
| STUDY |
| |
| % MSSEG (X clear filter) |
| |
| X clear selection |
| |
| [X] Study2 |
| [X] USPIO |
| [X] StudyThirtyThree |
| |
| [ ] MSSEG (0) | | |
| [ ] MSSEG-2 (0) | | |
| filtered : 2 total : 287 |
+-----------------------------+
Clear the selection
- hide "clear selection" since nothing is selected
+-----------------------------+
| STUDY |
| |
| % MSSEG (X clear filter) |
| |
| [ ] MSSEG (0) | | |
| [ ] MSSEG-2 (0) | | |
| filtered : 2 total : 287 |
+-----------------------------+
The search field could have 2 modes :
- default mode : free text
- expert mode : Solr syntax
+------------------------+
____________________ | % Search in Shanoir |
X clear +------------------------+
[ ] Expert mode (help)
Default collapsed documentation about Solr syntax, revealed by clicking "help" ...
This optional feature would allow the user to :
- visualize all the terms of his search
- easily remove any term
It will have this appearance :
- small blocks mentioning the search terms
- removable with a x
- somewhere at the top of the page
The dataset subset is the list of datasets that match the Solr query. It features :
- paging
- configurable page size
- columns :
- Id
- Name
- Type
- Nature (MR, PET, ...)
- Creation date
- Study name
- Subject name
- Exam name
- Exam Date
- resizeable columns
- sorting by clicking columns headers
- by clicking a row, the user can access to the dataset details
- each row has a checkbox
- a master checkbox allow to check / uncheck every checkbox of the current page
- the checked state is saved when using the paging
- buttons allow to download every checked dataset at once, choosing between dicom and nifti
- buttons allow to download all the subset if it's not too big
- button to delete selected datasets
- in Shanoir the dataset delete right is given to EXPERTs that CAN_ADMINISTRATE
- a popup asks for confirmation
Instead of searching for datasets inside Study1 ∩ Subject1, a user might want to search inside Study1 ∪ Subject1.
A user-friendly solution might been implemented in the future but for now this kind of search will be considered "advanced" and will be possible only through the "expert mode" and Solr query syntax.