Skip to content

Solr User Interface Specification

Julien Louis edited this page Jun 16, 2021 · 3 revisions

Analyse

Discussion with Shanoir users

  • 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

Vocabulary : ∪ / ∩

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.

The search text input

From October 2016 document by E. Bannier, I. Corouge and M. Simon

  • "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."

Comment

  • 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

From February 2017 document by M. Simon

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.

Comment

  • 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

Trying to unravel difficulties through use cases - search criteria only

Solution 1 : hide impossible options and allow ∪ within a criterion

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.

Use case 1

  • 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

Use case 2

  • 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

Analysis

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

Solution 2 : Show every criteria value with their matching quantity

Use case 3

  • 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)

Analysis

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

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

Solution 3 : accurate numbers

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.

Use case 4

  • 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

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

Conclusion about the search criteria

In my opinion, the solution 2 is technically the best option and ergonomically a good compromise. The solution 3 is not realistic.

Trying to unravel difficulties through use cases - with a search input

Use case 3 extended

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

Use case 9 - More complex solr search

  • 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
  • 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.

Can we have plain text search fields for every criterion ?

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.

Functional requirements

Criteria list

  • studies
  • subjects
  • dataset names
  • examination comments
  • dataset modality types
  • mr dataset natures
  • centers (new)
  • healthy volunteer / patient

Criteria values selection

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  |
+-----------------------------+

Search text input field

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" ...

Closeable search terms

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

Subset list

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

Advanced search options

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.

Clone this wiki locally