Skip to content

Commit 010ae4e

Browse files
committed
-> #1446 (and related)
1 parent 2060b26 commit 010ae4e

File tree

3 files changed

+44
-40
lines changed

3 files changed

+44
-40
lines changed

etl/etl.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,8 @@
6464
"program", "access", "date_updated", "tcia_wiki_collection_id", "license_short_name", "active"
6565
])}
6666

67+
TOKENIZED_FIELDS = ["PatientID", "SeriesInstanceUID", "StudyInstanceUID"]
68+
6769
ranges_needed = {
6870
'wbc_at_diagnosis': 'by_200',
6971
'event_free_survival_time_in_days': 'by_500',
@@ -424,7 +426,13 @@ def create_solr_params(schema_src, solr_src):
424426
schema = BigQuerySupport.get_table_schema(schema_src[0],schema_src[1],schema_src[2])
425427
solr_schema = []
426428
solr_index_strings = []
427-
SCHEMA_BASE = '{"add-field": %s}'
429+
field_types = ''
430+
add_copy_field = ''
431+
SCHEMA_BASE = '{{field_types}add-field": {fields}{add_copy_field}'
432+
if len(TOKENIZED_FIELDS):
433+
field_types = '"add-field-type": { "name":"tokenizedText", "class":"solr.TextField", "analyzer" : { "tokenizer": { "name":"nGram" }}}, '
434+
copy_fields = ",".join(['{"source":"{field}","dest":"{field{}_tokenized"}'.format(field) for field in TOKENIZED_FIELDS])
435+
add_copy_field = ', "add-copy-field": [{copy_fields}]'.format(copy_fields)
428436
CORE_CREATE_STRING = "sudo -u solr /opt/bitnami/solr/bin/solr create -c {solr_src} -s 2 -rf 2"
429437
SCHEMA_STRING = "curl -u {solr_user}:{solr_pwd} -X POST -H 'Content-type:application/json' --data-binary '{schema}' https://localhost:8983/solr/{solr_src}/schema --cacert solr-ssl.pem"
430438
INDEX_STRING = "curl -u {solr_user}:{solr_pwd} -X POST 'https://localhost:8983/solr/{solr_src}/update?commit=yes{params}' --data-binary @{file_name}.csv -H 'Content-type:application/csv' --cacert solr-ssl.pem"
@@ -441,11 +449,22 @@ def create_solr_params(schema_src, solr_src):
441449
"stored": True
442450
}
443451
solr_schema.append(field_schema)
452+
if TOKENIZED_FIELDS and field['name'] in TOKENIZED_FIELDS:
453+
solr_schema.append({
454+
"name": "{}_tokenized".format(field["name"]),
455+
"type": "tokenizedText",
456+
"multiValued": False if field['name'] in SOLR_SINGLE_VAL.get(solr_src.aggregate_level,
457+
{}) else True,
458+
"stored": True
459+
})
444460
if field_schema['multiValued']:
445461
solr_index_strings.append("f.{}.split=true&f.{}.separator=|".format(field['name'],field['name']))
446462

447463
with open("{}_solr_cmds.txt".format(solr_src.name), "w") as cmd_outfile:
448-
schema_array = SCHEMA_BASE % solr_schema
464+
schema_array = SCHEMA_BASE.format(
465+
field_types=field_types,
466+
add_copy_field=add_copy_field
467+
)
449468
params = "&{}".format("&".join(solr_index_strings))
450469
cmd_outfile.write(CORE_CREATE_STRING.format(solr_src=solr_src.name))
451470
cmd_outfile.write("\n\n")

idc/views.py

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -372,16 +372,15 @@ def studymp(request):
372372
return JsonResponse(response, status=status)
373373

374374

375-
376-
377375
def populate_tables(request):
378376
response = {}
379377
status = 200
380378

381379
try:
382-
req = request.GET if request.GET else request.POST
380+
req = request.GET if request.method == 'GET' else request.POST
383381
path_arr = [nstr for nstr in request.path.split('/') if nstr]
384382
table_type = path_arr[len(path_arr)-1]
383+
table_search = req.get("table_search", "false").lower() == 'true'
385384
fields = None
386385
collapse_on = None
387386
filters = json.loads(req.get('filters', '{}'))
@@ -399,7 +398,7 @@ def populate_tables(request):
399398
sort = req.get('sort', 'PatientID')
400399
sortdir = req.get('sortdir', 'asc')
401400

402-
[cnt, tableRes]=get_table_data_with_cart_data(table_type, sort, sortdir, filters, filtergrp_list, partitions, limit, offset)
401+
[cnt, tableRes]=get_table_data_with_cart_data(table_type, sort, sortdir, filters, filtergrp_list, partitions, limit, offset, table_search)
403402
response["res"] = tableRes
404403
response["cnt"] = cnt
405404
response["diff"] = []
@@ -415,10 +414,6 @@ def populate_tables(request):
415414
return JsonResponse(response, status=status)
416415

417416

418-
419-
420-
421-
422417
def populate_tables_old(request):
423418
response = {}
424419
status = 200

static/js/tables.js

Lines changed: 20 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -560,7 +560,7 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
560560
// recreates the cases table when a chevron is clicked in the projects table. Defines the chevron and cart selection actions.
561561
// Updates data structures such as casesCache, which caches case rows to limit calls to the server, and selProjects, which stores information
562562
// across tables about which items are added to the cart, and which chevrons are selected
563-
window.updateCaseTable = function(rowsAdded,caseID) {
563+
window.updateCaseTable = function(rowsAdded,caseID, table_search) {
564564
viewedProjects =Object.keys(window.openProjects);
565565
if ($('#cases_tab_wrapper').find('.dataTables_controls').length>0){
566566
pageRows = parseInt($('#cases_tab_wrapper').find('.dataTables_length select').val());
@@ -683,7 +683,7 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
683683
}
684684

685685
}
686-
686+
ndic['table_search'] = table_search;
687687

688688
var csrftoken = $.getCookie('csrftoken');
689689
$.ajax({
@@ -748,7 +748,7 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
748748
}
749749

750750

751-
window.updateStudyTable = function(rowsAdded, studyID) {
751+
window.updateStudyTable = function(rowsAdded, studyID, table_search) {
752752
let nonViewAbleModality= new Set([""]);
753753
var viewCases = [];
754754
for (projid in window.openCases) {
@@ -992,7 +992,6 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
992992
return '<i class="fa fa-download study-export export-button" data-series-count="'+row['unique_series']
993993
+'" data-uid="'+data+'"data-toggle="modal" data-target="#export-manifest-modal"></i>'
994994
}
995-
996995
}
997996
],
998997
"processing": true,
@@ -1035,9 +1034,9 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
10351034
}
10361035
ndic['partitions'] = JSON.stringify(window.partitions);
10371036
ndic['filtergrp_list'] = JSON.stringify(window.filtergrp_list);
1037+
ndic['table_search'] = table_search;
1038+
let csrftoken = $.getCookie('csrftoken');
10381039

1039-
1040-
var csrftoken = $.getCookie('csrftoken');
10411040
$.ajax({
10421041
url: url,
10431042
dataType: 'json',
@@ -1099,7 +1098,7 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
10991098
$('#studies_tab_wrapper').find('.dataTables_controls').find('.dataTables_paginate').after('<div class="dataTables_filter"><strong>Find by Study Instance UID:</strong><input class="studyID_inp" type="text-box" value="'+studyID+'"><button onclick="filterTable(\'studies_tab_wrapper\',\'studyID\')">Go</button></div>');
11001099
}
11011100

1102-
window.updateSeriesTable = function(rowsAdded, seriesID) {
1101+
window.updateSeriesTable = function(rowsAdded, seriesID, table_search) {
11031102
var nonViewAbleModality= new Set(["PR","SEG","RTSTRUCT","RTPLAN","RWV", "SR", "ANN"])
11041103
var slimViewAbleModality=new Set(["SM"])
11051104
viewStudies = []
@@ -1130,51 +1129,41 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
11301129

11311130
$(row).attr('data-aws', data['aws_bucket'])
11321131

1133-
1134-
11351132
if ('cart_series_in_collection' in data){
11361133
$(row).attr('cart_series_in_collection', data['cart_series_in_collection']);
1137-
}
1138-
else{
1134+
} else{
11391135
$(row).attr('cart_series_in_collection','0')
11401136
}
11411137
if ('filter_series_in_collection' in data){
11421138
$(row).attr('filter_series_in_collection', data['filter_series_in_collection']);
1143-
}
1144-
else{
1139+
} else {
11451140
$(row).attr('filter_series_in_collection','0')
11461141
}
11471142
if ('filter_cart_series_in_collection' in data){
11481143
$(row).attr('filter_cart_series_in_collection', data['filter_cart_series_in_collection']);
1149-
}
1150-
else{
1144+
} else {
11511145
$(row).attr('filter_cart_series_in_collection','0')
11521146
}
11531147

1154-
11551148
if ('cart_series_in_case' in data){
11561149
$(row).attr('cart_series_in_case', data['cart_series_in_case']);
1157-
}
1158-
else{
1150+
} else {
11591151
$(row).attr('cart_series_in_case','0')
11601152
}
11611153
if ('filter_series_in_case' in data){
11621154
$(row).attr('filter_series_in_case', data['filter_series_in_case']);
1163-
}
1164-
else{
1155+
} else {
11651156
$(row).attr('filter_series_in_case','0')
11661157
}
11671158
if ('filter_cart_series_in_case' in data){
11681159
$(row).attr('filter_cart_series_in_case', data['filter_cart_series_in_case']);
1169-
}
1170-
else{
1160+
} else {
11711161
$(row).attr('filter_cart_series_in_case','0')
11721162
}
11731163

11741164
if ('cart_series_in_study' in data){
11751165
$(row).attr('cart_series_in_study', data['cart_series_in_study']);
1176-
}
1177-
else{
1166+
} else {
11781167
$(row).attr('cart_series_in_study','0')
11791168
}
11801169
if ('filter_series_in_study' in data){
@@ -1385,6 +1374,7 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
13851374
}
13861375
ndic['partitions'] = JSON.stringify(window.partitions);
13871376
ndic['filtergrp_list'] = JSON.stringify(window.filtergrp_list);
1377+
ndic['table_search'] = table_search;
13881378
var csrftoken = $.getCookie('csrftoken');
13891379
$.ajax({
13901380
url: url,
@@ -2090,21 +2080,21 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
20902080
if ($('#cases_tab').find('.caseID-inp').length > 0) {
20912081
caseID = $('#studies_tab').find('.caseID-inp').val();
20922082
}
2093-
updateCaseTable(rowsAdded, caseID);
2083+
updateCaseTable(rowsAdded, caseID, false);
20942084
}
20952085
if (studyTableUpdate) {
20962086
var studyID = "";
20972087
if ($('#studies_tab').find('.studyID-inp').length > 0) {
20982088
studyID = $('#studies_tab').find('.studyID-inp').val();
20992089
}
2100-
updateStudyTable(rowsAdded, studyID);
2090+
updateStudyTable(rowsAdded, studyID, false);
21012091
}
21022092
if (seriesTableUpdate) {
21032093
var seriesID = "";
21042094
if ($('#series_tab').find('.seriesID-inp').length > 0) {
21052095
seriesID = $('#series_tab').find('.seriesID-inp').val();
21062096
}
2107-
updateSeriesTable(rowsAdded, seriesID);
2097+
updateSeriesTable(rowsAdded, seriesID, false);
21082098

21092099
}
21102100

@@ -2179,14 +2169,14 @@ define(['cartutils','filterutils','tippy','jquery', 'base'], function(cartutils,
21792169
var elem=$('#'+wrapper);
21802170
var varStr=elem.find('.dataTables_controls').find('.'+type+'_inp').val();
21812171
if (type ==="seriesID") {
2182-
window.updateSeriesTable(false,varStr)
2172+
window.updateSeriesTable(false,varStr, true)
21832173
}
21842174

21852175
else if (type ==="studyID") {
2186-
window.updateStudyTable(false, varStr)
2176+
window.updateStudyTable(false, varStr, true)
21872177
}
21882178
else if (type==="caseID"){
2189-
window.updateCaseTable(false,varStr)
2179+
window.updateCaseTable(false,varStr, true)
21902180
}
21912181
}
21922182

0 commit comments

Comments
 (0)