Dash/Cytoscape Nested JSON Selector Styling - plotly-dash

So I have a JSON data file that I am using with Dash/Cytoscope:
"data": {
"label": "Customer",
"properties": {
"score": 8.0,
}
}
I need to compare 'score' with the selector to see if it is bigger than 9.
So far I have tried:
'selector': 'node[properties[score > 9]]'
'selector': '[score > 9]'
'selector': '[properties[score > 9]]'
Unfortunately nothing has worked so far, just invalid syntax.

As canbax pointed out, using functions inside the stylesheet should do the trick.
I added a border-color depending on a nodes score property like this, but you can customize it as you like:
'border-color': function (node) {
if (node.data('properties').score >= 9) { return 'green'}
else { return 'black' }
},
var cy = window.cy = cytoscape({
container: document.getElementById('cy'),
boxSelectionEnabled: false,
autounselectify: true,
style: [{
selector: 'node',
css: {
'content': 'data(id)',
'text-valign': 'center',
'text-halign': 'center',
'height': '60px',
'width': '60px',
'border-color': function(node) {
if (node.data('properties').score >= 9) {
return 'green'
} else {
return 'black'
}
},
'border-opacity': '1',
'border-width': '10px'
}
},
{
selector: '$node > node',
css: {
'padding-top': '10px',
'padding-left': '10px',
'padding-bottom': '10px',
'padding-right': '10px',
'text-valign': 'top',
'text-halign': 'center',
'background-color': '#bbb'
}
},
{
selector: 'edge',
css: {
'target-arrow-shape': 'triangle'
}
},
{
selector: ':selected',
css: {
'background-color': 'black',
'line-color': 'black',
'target-arrow-color': 'black',
'source-arrow-color': 'black'
}
}
],
elements: {
nodes: [{
data: {
id: 'n0',
"properties": {
"score": 9.0
}
}
},
{
data: {
id: 'n1',
"properties": {
"score": 10.0
}
}
},
{
data: {
id: 'n2',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n3',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n4',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n5',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n6',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n7',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n8',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n9',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n10',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n11',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n12',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n13',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n14',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n15',
"properties": {
"score": 8.0
}
}
},
{
data: {
id: 'n16',
"properties": {
"score": 8.0
}
}
}
],
edges: [{
data: {
source: 'n0',
target: 'n1'
}
},
{
data: {
source: 'n1',
target: 'n2'
}
},
{
data: {
source: 'n1',
target: 'n3'
}
},
{
data: {
source: 'n2',
target: 'n7'
}
},
{
data: {
source: 'n2',
target: 'n11'
}
},
{
data: {
source: 'n2',
target: 'n16'
}
},
{
data: {
source: 'n3',
target: 'n4'
}
},
{
data: {
source: 'n3',
target: 'n16'
}
},
{
data: {
source: 'n4',
target: 'n5'
}
},
{
data: {
source: 'n4',
target: 'n6'
}
},
{
data: {
source: 'n6',
target: 'n8'
}
},
{
data: {
source: 'n8',
target: 'n9'
}
},
{
data: {
source: 'n8',
target: 'n10'
}
},
{
data: {
source: 'n11',
target: 'n12'
}
},
{
data: {
source: 'n12',
target: 'n13'
}
},
{
data: {
source: 'n13',
target: 'n14'
}
},
{
data: {
source: 'n13',
target: 'n15'
}
},
]
},
layout: {
name: 'dagre',
padding: 5
}
});
body {
font: 14px helvetica neue, helvetica, arial, sans-serif;
}
#cy {
height: 100%;
width: 75%;
position: absolute;
left: 0;
top: 0;
float: left;
}
<html>
<head>
<meta charset=utf-8 />
<meta name="viewport" content="user-scalable=no, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, minimal-ui">
<script src="https://cdnjs.cloudflare.com/ajax/libs/cytoscape/3.2.17/cytoscape.min.js"></script>
<script src="https://unpkg.com/jquery#3.3.1/dist/jquery.js"></script>
<script src="https://unpkg.com/dagre#0.7.4/dist/dagre.js"></script>
<script src="https://cdn.rawgit.com/cytoscape/cytoscape.js-dagre/1.5.0/cytoscape-dagre.js"></script>
</head>
<body>
<div id="cy"></div>
</body>
</html>

Related

Python generate json: bool malformed query, expected END_OBJECT but found FIELD_NAME

i have a probleme with elastic search when i request it with the following json, i have this error: [bool] malformed query, expected [END_OBJECT] but found [FIELD_NAME]
i've tried to look on many site but none of them give me a response
{
"query":{
"bool":{
"must":[
{
"match":{
"group_issuer_name":"bnp"
}
},
{
"match":{
"asset_country":"France"
}
}
]
},
"aggs":{
"by_ptf_name":{
"terms":{
"field":"ptf_name.keyword"
},
"aggs":{
"by_ptf_id":{
"terms":{
"field":"ptf_id.keyword"
},
"aggs":{
"sum_of_asset_exposure":{
"sum":{
"field":"asset_exposure"
}
},
"min_of_ptf_total_asset":{
"min":{
"field":"ptf_total_asset"
}
}
}
}
}
}
}
}
}
You are missing }. The query part must be closed and then the aggregation part should start.
The structure should be
{
"query": {},
"aggregation": {}
}
Modify your query as -
{
"query": {
"bool": {
"must": [
{
"match": {
"group_issuer_name": "bnp"
}
},
{
"match": {
"asset_country": "France"
}
}
]
}
}, // note this
"aggs": {
"by_ptf_name": {
"terms": {
"field": "ptf_name.keyword"
},
"aggs": {
"by_ptf_id": {
"terms": {
"field": "ptf_id.keyword"
},
"aggs": {
"sum_of_asset_exposure": {
"sum": {
"field": "asset_exposure"
}
},
"min_of_ptf_total_asset": {
"min": {
"field": "ptf_total_asset"
}
}
}
}
}
}
}
}

Adjust position of a line chart series label using echarts

i have a angular web application with a line graph (using echarts) with multiple series.
the labels of the series are overlapping, is there a way to adjust their position or size etc to prevent them from over lapping ?
my code:
thisInstance._paidUnpaidSplitGraphOptions = {
title: {
text: 'Paid/Unpaid Claims'
},
tooltip: {
trigger: 'axis',
axisPointer: {
type: 'cross',
label: {
backgroundColor: '#6a7985'
}
}
},
legend: {
data: ['Unpaid Claims', 'Paid Claims']
},
grid: {
left: '5%',
right: '6%',
bottom: '5%',
containLabel: true
},
toolbox: {
feature: {
saveAsImage: {
title: "Download Image of Chart"
},
dataZoom: {
yAxisIndex: false,
title: { "zoom": "Zoom Chart", "back": "Remove Zoom" }
},
brush: {
type: ['lineX', 'clear'],
title: {
"lineX": "LineX", "clear": "Clear" }
}
}
},
xAxis: [
{
type: 'category',
boundaryGap: false,
data: xAxisData
}
],
yAxis: [
{
type: 'value'
}
],
series: [
{
name: 'Paid Claims',
type: 'line',
stack: 'WWWWWWWW',
label: {
position: 'TopLeft',
normal: {
show: true,
formatter: function (data) {
return thisInstance.GetFormattedValue(data);
},
color: '#151515'
}
},
areaStyle: { normal: {} },
data: paidAmounts
},
{
name: 'Unpaid Claims',
type: 'line',
stack: 'WWWWWWWW',
label: {
normal: {
show: true,
formatter: function (data) {
return thisInstance.GetFormattedValue(data);
},
position: 'BottomRight',
color: '#151515'
}
},
areaStyle: { normal: {} },
data: unPaidAmounts
}
]
}
html code:
<div class="clr-row">
<div class="clr-col-2">
</div>
<div class="clr-col-8">
<div echarts [options]="this._appService.GraphsService._paidUnpaidSplitGraphOptions" class="demo-chart"></div>
</div>
<div class="clr-col-2">
<button class="btn btn-outline btn-sm" (click)="this._appService.ClaimCaptureService.GetHpCodesLagReport()"><clr-icon shape="download"></clr-icon>LAG REPORT</button><br />
<button class="btn btn-success-outline btn-sm" (click)="this._appService.ClaimCaptureService.GetHpCodesAgeReport()"><clr-icon shape="download"></clr-icon>AGE ANALYSIS REPORT</button>
</div>
</div>
What i have tried so far is to change the position of the labels as you can see in the above code t making the one 'TopLeft' and the other 'BottomRight', but this didn't seem to help at all the labels are still overlapping.
below is a screenshot of what it looks like
To move text slightly you can use offset: [0,-15], reference.
However you might want to use the label formatter to mask the labels that are under a certain value.
Example
var data = [
[820, 932, 901, 934, 1290, 330, 320],
[0, 0, 0, 0, 0, 900, 1320]
];
var option = {
xAxis: {
type: "category",
data: ["Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"]
},
yAxis: {},
itemStyle: {
},
series: [{
data: data[0],
type: "line",
stack: "stack",
color: 'blue',
areaStyle: {
color: 'blue',
opacity: 0.3
},
label: {
position: "top",
offset: [0, -15],
show: true,
}
},
{
data: data[1],
type: "line",
stack: "stack",
areaStyle: {
color: 'red',
opacity: 0.3
},
label: {
position: "top",
show: true,
formatter: function (params) {
return (params.value === 0) ? "" : params.value;
}
}
}
]
}
var dom = document.getElementById("container");
var myChart = echarts.init(dom);
if (option && typeof option === "object")
myChart.setOption(option, true);
<!DOCTYPE html>
<html style="height: 100%">
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/echarts/dist/echarts.min.js"></script>
</head>
<body style="height: 100%; margin: 0">
<div id="container" style="height: 90%"></div>
</body>
</html>
Stacked line graph with masked labels
You should try avoidLabelOverlap = true

Collapsed list overflowing

I am working on a school project and I just ran into a problem with a which is collapsed into an input box (I will apply filter list later on) but when this list shows it overflows out of my landing screen and just looks bad. Does anyone have any suggestions to work this out I´m trying to imitate this page (notice how you can click on the input box and the list won't show until the user types something) I did my best to imitate it in my code?
This is an image of my HTML.
$(document).ready(function() {
var header = $('#landing_home');
var backgrounds = new Array(
'url(Recursos/imagenes_bg/bridge.jpeg)', 'url(Recursos/imagenes_bg/lake.jpeg)', 'url(Recursos/imagenes_bg/mountain.jpg)', 'url(Recursos/imagenes_bg/river.jpeg)', 'url(Recursos/imagenes_bg/villa.jpeg)'
);
var current = 0;
//Fuente para animar el fondo: https://stackoverflow.com/questions/53547736/animate-changing-backgrounds , yo hice la pregunta por eso esta mi codigo ahi.
function nextBackground() {
header.animate({
opacity: 0.5
}, 0);
current++;
current = current % backgrounds.length;
//header.fadeTo("slow", 0.5)
header.css('background-image', backgrounds[current]).animate({
opacity: 1
}, 'slow');
//header.fadeTo("slow", 1)
}
setInterval(nextBackground, 7000);
header.css('background-image', backgrounds[0]).animate({
opacity: 1
}, 'slow');
});
body,
html {
height: 100%;
}
.logo {
width: 75%;
height: 75%;
opacity: 1;
}
.home {
height: 100%;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
opacity: 0.9;
}
.text_home {
color: white;
font-size: 400%;
font-weight: 500;
text-align: center;
text-shadow: 1px 1px 10px #000000;
}
.form_home {
text-align: center;
}
.form_home input[type=text] {
width: 75%;
box-shadow: 1px 1px 10px #000000;
padding: 8px;
text-align: justify;
font-size: 200%;
}
.form_list {
font-size: 150%;
}
.list-group {
display: block;
margin: 0 auto;
}
.home_jumbo {
background-color: #B1B1B1;
}
<!DOCTYPE html>
<html>
<head>
<title>Trip Guru</title>
<meta charset="utf-8" />
<link href="main.css" rel="stylesheet" />
<link href="Content/bootstrap-grid.css" rel="stylesheet" />
<link href="Content/bootstrap.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>
<body>
<div class="home" id="landing_home">
<nav class="navbar bg-transparent sticky-top">
<a class="navbar-brand" href="index.html"><img src="Recursos/Logo/logo_white.png" class="logo" /></a>
</nav>
<h1 class="text_home"> Decubre tu siguiente destino </h1>
<div class="form_home">
<input type="text" class="form_home" placeholder="Buscar" data-toggle="collapse" data-target="#paises" />
</div>
<ul class="list-group collapse text-center w-75 form_list" id="paises">
<li class="list-group-item">Rusia</li>
<li class="list-group-item">Corea del Sur</li>
<li class="list-group-item">Japón</li>
<li class="list-group-item">Costa Rica</li>
<li class="list-group-item">Dubai</li>
<li class="list-group-item">Suecia</li>
<li class="list-group-item">Alemania</li>
<li class="list-group-item">Francia</li>
<li class="list-group-item">Brasil</li>
<li class="list-group-item">China</li>
</ul>
</div>
<div class="jumbotron-fluid home_jumbo">
<h1 class="display-1">It overflows here</h1>
</div>
<script src="main_script.js"></script>
<script src="scripts/jquery-3.3.1.min.js"></script>
<script src="scripts/bootstrap.js"></script>
<!--Bootstrap JS-->
</body>
</html>
If I understand correct you just need to insert this part, on the open part:
max-height: 500px;
overflow-y: auto;
this will create a limitation in the size and makes the overflow only in the vertical
I just solved it using this. It hiddes when it overflows vertically and lets you scroll.
.list-group {
cursor:pointer;
height:30%;
display: block;
margin: 0 auto;
overflow-x: hidden;
overflow-y: scroll;
}
If you need autocomplete
const input = $('#autocomplete');
const dropdown = $('#dropdown');
const countries = [{
name: 'Afghanistan',
code: 'AF'
},
{
name: 'Åland Islands',
code: 'AX'
},
{
name: 'Albania',
code: 'AL'
},
{
name: 'Algeria',
code: 'DZ'
},
{
name: 'American Samoa',
code: 'AS'
},
{
name: 'AndorrA',
code: 'AD'
},
{
name: 'Angola',
code: 'AO'
},
{
name: 'Anguilla',
code: 'AI'
},
{
name: 'Antarctica',
code: 'AQ'
},
{
name: 'Antigua and Barbuda',
code: 'AG'
},
{
name: 'Argentina',
code: 'AR'
},
{
name: 'Armenia',
code: 'AM'
},
{
name: 'Aruba',
code: 'AW'
},
{
name: 'Australia',
code: 'AU'
},
{
name: 'Austria',
code: 'AT'
},
{
name: 'Azerbaijan',
code: 'AZ'
},
{
name: 'Bahamas',
code: 'BS'
},
{
name: 'Bahrain',
code: 'BH'
},
{
name: 'Bangladesh',
code: 'BD'
},
{
name: 'Barbados',
code: 'BB'
},
{
name: 'Belarus',
code: 'BY'
},
{
name: 'Belgium',
code: 'BE'
},
{
name: 'Belize',
code: 'BZ'
},
{
name: 'Benin',
code: 'BJ'
},
{
name: 'Bermuda',
code: 'BM'
},
{
name: 'Bhutan',
code: 'BT'
},
{
name: 'Bolivia',
code: 'BO'
},
{
name: 'Bosnia and Herzegovina',
code: 'BA'
},
{
name: 'Botswana',
code: 'BW'
},
{
name: 'Bouvet Island',
code: 'BV'
},
{
name: 'Brazil',
code: 'BR'
},
{
name: 'British Indian Ocean Territory',
code: 'IO'
},
{
name: 'Brunei Darussalam',
code: 'BN'
},
{
name: 'Bulgaria',
code: 'BG'
},
{
name: 'Burkina Faso',
code: 'BF'
},
{
name: 'Burundi',
code: 'BI'
},
{
name: 'Cambodia',
code: 'KH'
},
{
name: 'Cameroon',
code: 'CM'
},
{
name: 'Canada',
code: 'CA'
},
{
name: 'Cape Verde',
code: 'CV'
},
{
name: 'Cayman Islands',
code: 'KY'
},
{
name: 'Central African Republic',
code: 'CF'
},
{
name: 'Chad',
code: 'TD'
},
{
name: 'Chile',
code: 'CL'
},
{
name: 'China',
code: 'CN'
},
{
name: 'Christmas Island',
code: 'CX'
},
{
name: 'Cocos (Keeling) Islands',
code: 'CC'
},
{
name: 'Colombia',
code: 'CO'
},
{
name: 'Comoros',
code: 'KM'
},
{
name: 'Congo',
code: 'CG'
},
{
name: 'Congo, The Democratic Republic of the',
code: 'CD'
},
{
name: 'Cook Islands',
code: 'CK'
},
{
name: 'Costa Rica',
code: 'CR'
},
{
name: 'Cote D\'Ivoire',
code: 'CI'
},
{
name: 'Croatia',
code: 'HR'
},
{
name: 'Cuba',
code: 'CU'
},
{
name: 'Cyprus',
code: 'CY'
},
{
name: 'Czech Republic',
code: 'CZ'
},
{
name: 'Denmark',
code: 'DK'
},
{
name: 'Djibouti',
code: 'DJ'
},
{
name: 'Dominica',
code: 'DM'
},
{
name: 'Dominican Republic',
code: 'DO'
},
{
name: 'Ecuador',
code: 'EC'
},
{
name: 'Egypt',
code: 'EG'
},
{
name: 'El Salvador',
code: 'SV'
},
{
name: 'Equatorial Guinea',
code: 'GQ'
},
{
name: 'Eritrea',
code: 'ER'
},
{
name: 'Estonia',
code: 'EE'
},
{
name: 'Ethiopia',
code: 'ET'
},
{
name: 'Falkland Islands (Malvinas)',
code: 'FK'
},
{
name: 'Faroe Islands',
code: 'FO'
},
{
name: 'Fiji',
code: 'FJ'
},
{
name: 'Finland',
code: 'FI'
},
{
name: 'France',
code: 'FR'
},
{
name: 'French Guiana',
code: 'GF'
},
{
name: 'French Polynesia',
code: 'PF'
},
{
name: 'French Southern Territories',
code: 'TF'
},
{
name: 'Gabon',
code: 'GA'
},
{
name: 'Gambia',
code: 'GM'
},
{
name: 'Georgia',
code: 'GE'
},
{
name: 'Germany',
code: 'DE'
},
{
name: 'Ghana',
code: 'GH'
},
{
name: 'Gibraltar',
code: 'GI'
},
{
name: 'Greece',
code: 'GR'
},
{
name: 'Greenland',
code: 'GL'
},
{
name: 'Grenada',
code: 'GD'
},
{
name: 'Guadeloupe',
code: 'GP'
},
{
name: 'Guam',
code: 'GU'
},
{
name: 'Guatemala',
code: 'GT'
},
{
name: 'Guernsey',
code: 'GG'
},
{
name: 'Guinea',
code: 'GN'
},
{
name: 'Guinea-Bissau',
code: 'GW'
},
{
name: 'Guyana',
code: 'GY'
},
{
name: 'Haiti',
code: 'HT'
},
{
name: 'Heard Island and Mcdonald Islands',
code: 'HM'
},
{
name: 'Holy See (Vatican City State)',
code: 'VA'
},
{
name: 'Honduras',
code: 'HN'
},
{
name: 'Hong Kong',
code: 'HK'
},
{
name: 'Hungary',
code: 'HU'
},
{
name: 'Iceland',
code: 'IS'
},
{
name: 'India',
code: 'IN'
},
{
name: 'Indonesia',
code: 'ID'
},
{
name: 'Iran, Islamic Republic Of',
code: 'IR'
},
{
name: 'Iraq',
code: 'IQ'
},
{
name: 'Ireland',
code: 'IE'
},
{
name: 'Isle of Man',
code: 'IM'
},
{
name: 'Israel',
code: 'IL'
},
{
name: 'Italy',
code: 'IT'
},
{
name: 'Jamaica',
code: 'JM'
},
{
name: 'Japan',
code: 'JP'
},
{
name: 'Jersey',
code: 'JE'
},
{
name: 'Jordan',
code: 'JO'
},
{
name: 'Kazakhstan',
code: 'KZ'
},
{
name: 'Kenya',
code: 'KE'
},
{
name: 'Kiribati',
code: 'KI'
},
{
name: 'Korea, Democratic People\'S Republic of',
code: 'KP'
},
{
name: 'Korea, Republic of',
code: 'KR'
},
{
name: 'Kuwait',
code: 'KW'
},
{
name: 'Kyrgyzstan',
code: 'KG'
},
{
name: 'Lao People\'S Democratic Republic',
code: 'LA'
},
{
name: 'Latvia',
code: 'LV'
},
{
name: 'Lebanon',
code: 'LB'
},
{
name: 'Lesotho',
code: 'LS'
},
{
name: 'Liberia',
code: 'LR'
},
{
name: 'Libyan Arab Jamahiriya',
code: 'LY'
},
{
name: 'Liechtenstein',
code: 'LI'
},
{
name: 'Lithuania',
code: 'LT'
},
{
name: 'Luxembourg',
code: 'LU'
},
{
name: 'Macao',
code: 'MO'
},
{
name: 'Macedonia, The Former Yugoslav Republic of',
code: 'MK'
},
{
name: 'Madagascar',
code: 'MG'
},
{
name: 'Malawi',
code: 'MW'
},
{
name: 'Malaysia',
code: 'MY'
},
{
name: 'Maldives',
code: 'MV'
},
{
name: 'Mali',
code: 'ML'
},
{
name: 'Malta',
code: 'MT'
},
{
name: 'Marshall Islands',
code: 'MH'
},
{
name: 'Martinique',
code: 'MQ'
},
{
name: 'Mauritania',
code: 'MR'
},
{
name: 'Mauritius',
code: 'MU'
},
{
name: 'Mayotte',
code: 'YT'
},
{
name: 'Mexico',
code: 'MX'
},
{
name: 'Micronesia, Federated States of',
code: 'FM'
},
{
name: 'Moldova, Republic of',
code: 'MD'
},
{
name: 'Monaco',
code: 'MC'
},
{
name: 'Mongolia',
code: 'MN'
},
{
name: 'Montserrat',
code: 'MS'
},
{
name: 'Morocco',
code: 'MA'
},
{
name: 'Mozambique',
code: 'MZ'
},
{
name: 'Myanmar',
code: 'MM'
},
{
name: 'Namibia',
code: 'NA'
},
{
name: 'Nauru',
code: 'NR'
},
{
name: 'Nepal',
code: 'NP'
},
{
name: 'Netherlands',
code: 'NL'
},
{
name: 'Netherlands Antilles',
code: 'AN'
},
{
name: 'New Caledonia',
code: 'NC'
},
{
name: 'New Zealand',
code: 'NZ'
},
{
name: 'Nicaragua',
code: 'NI'
},
{
name: 'Niger',
code: 'NE'
},
{
name: 'Nigeria',
code: 'NG'
},
{
name: 'Niue',
code: 'NU'
},
{
name: 'Norfolk Island',
code: 'NF'
},
{
name: 'Northern Mariana Islands',
code: 'MP'
},
{
name: 'Norway',
code: 'NO'
},
{
name: 'Oman',
code: 'OM'
},
{
name: 'Pakistan',
code: 'PK'
},
{
name: 'Palau',
code: 'PW'
},
{
name: 'Palestinian Territory, Occupied',
code: 'PS'
},
{
name: 'Panama',
code: 'PA'
},
{
name: 'Papua New Guinea',
code: 'PG'
},
{
name: 'Paraguay',
code: 'PY'
},
{
name: 'Peru',
code: 'PE'
},
{
name: 'Philippines',
code: 'PH'
},
{
name: 'Pitcairn',
code: 'PN'
},
{
name: 'Poland',
code: 'PL'
},
{
name: 'Portugal',
code: 'PT'
},
{
name: 'Puerto Rico',
code: 'PR'
},
{
name: 'Qatar',
code: 'QA'
},
{
name: 'Reunion',
code: 'RE'
},
{
name: 'Romania',
code: 'RO'
},
{
name: 'Russian Federation',
code: 'RU'
},
{
name: 'RWANDA',
code: 'RW'
},
{
name: 'Saint Helena',
code: 'SH'
},
{
name: 'Saint Kitts and Nevis',
code: 'KN'
},
{
name: 'Saint Lucia',
code: 'LC'
},
{
name: 'Saint Pierre and Miquelon',
code: 'PM'
},
{
name: 'Saint Vincent and the Grenadines',
code: 'VC'
},
{
name: 'Samoa',
code: 'WS'
},
{
name: 'San Marino',
code: 'SM'
},
{
name: 'Sao Tome and Principe',
code: 'ST'
},
{
name: 'Saudi Arabia',
code: 'SA'
},
{
name: 'Senegal',
code: 'SN'
},
{
name: 'Serbia and Montenegro',
code: 'CS'
},
{
name: 'Seychelles',
code: 'SC'
},
{
name: 'Sierra Leone',
code: 'SL'
},
{
name: 'Singapore',
code: 'SG'
},
{
name: 'Slovakia',
code: 'SK'
},
{
name: 'Slovenia',
code: 'SI'
},
{
name: 'Solomon Islands',
code: 'SB'
},
{
name: 'Somalia',
code: 'SO'
},
{
name: 'South Africa',
code: 'ZA'
},
{
name: 'South Georgia and the South Sandwich Islands',
code: 'GS'
},
{
name: 'Spain',
code: 'ES'
},
{
name: 'Sri Lanka',
code: 'LK'
},
{
name: 'Sudan',
code: 'SD'
},
{
name: 'Suriname',
code: 'SR'
},
{
name: 'Svalbard and Jan Mayen',
code: 'SJ'
},
{
name: 'Swaziland',
code: 'SZ'
},
{
name: 'Sweden',
code: 'SE'
},
{
name: 'Switzerland',
code: 'CH'
},
{
name: 'Syrian Arab Republic',
code: 'SY'
},
{
name: 'Taiwan, Province of China',
code: 'TW'
},
{
name: 'Tajikistan',
code: 'TJ'
},
{
name: 'Tanzania, United Republic of',
code: 'TZ'
},
{
name: 'Thailand',
code: 'TH'
},
{
name: 'Timor-Leste',
code: 'TL'
},
{
name: 'Togo',
code: 'TG'
},
{
name: 'Tokelau',
code: 'TK'
},
{
name: 'Tonga',
code: 'TO'
},
{
name: 'Trinidad and Tobago',
code: 'TT'
},
{
name: 'Tunisia',
code: 'TN'
},
{
name: 'Turkey',
code: 'TR'
},
{
name: 'Turkmenistan',
code: 'TM'
},
{
name: 'Turks and Caicos Islands',
code: 'TC'
},
{
name: 'Tuvalu',
code: 'TV'
},
{
name: 'Uganda',
code: 'UG'
},
{
name: 'Ukraine',
code: 'UA'
},
{
name: 'United Arab Emirates',
code: 'AE'
},
{
name: 'United Kingdom',
code: 'GB'
},
{
name: 'United States',
code: 'US'
},
{
name: 'United States Minor Outlying Islands',
code: 'UM'
},
{
name: 'Uruguay',
code: 'UY'
},
{
name: 'Uzbekistan',
code: 'UZ'
},
{
name: 'Vanuatu',
code: 'VU'
},
{
name: 'Venezuela',
code: 'VE'
},
{
name: 'Viet Nam',
code: 'VN'
},
{
name: 'Virgin Islands, British',
code: 'VG'
},
{
name: 'Virgin Islands, U.S.',
code: 'VI'
},
{
name: 'Wallis and Futuna',
code: 'WF'
},
{
name: 'Western Sahara',
code: 'EH'
},
{
name: 'Yemen',
code: 'YE'
},
{
name: 'Zambia',
code: 'ZM'
},
{
name: 'Zimbabwe',
code: 'ZW'
}
];
input.on('input', () => {
dropdown.html('');
countries.map((country) => {
if (country.name.toLowerCase().includes(input.val().toLowerCase())) {
dropdown.append(`
<div class="list-group-item">
${country.name}
</div>
`);
}
});
$('.list-group-item').on('click', (e) => {
input.val(e.target.innerText);
dropdown.html('');
});
});
.dropdown-wrapper {
max-height: 300px;
overflow: auto;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
<input id="autocomplete" class="form-control">
<div class="dropdown-wrapper">
<div id="dropdown" class="list-group">
</div>

ElasticSearch Nest Msearch fn does not bring all results

My aim is to send 3 separate queries in one ES request using multiple search
I am using NEST client to send query to Elastic search using function below
IElasticClient _elasticClient.LowLevel.Msearch<string>(query).Body;
Passing as a raw query using curl command works absolutely fine, but NEST MSearch only returns "event_results" and "venue_results" but not "location_results"
curl -XPOST localhost:9200/_msearch -d '
{"index" : "search_results"}
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "name": "manchester" } } ] } }, "aggs": { "event_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } }
{"index" : "search_results2"}
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "venueName": "Manchester" } } ] } }, "aggs": { "venue_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } }
{"index" : "search_results3"}
{ "size": 0, "query": { "bool": { "must": [ { "term": { "partnersites": "16" } }, { "match_phrase_prefix": { "venueTown": "manchester" } } ] } }, "aggs": { "location_results": { "terms": { "field": "name.keyword", "size": 1 }, "aggs": { "top_tag_hits": { "top_hits": { "size": 1, "_source": [ "name", "groupedName", "groupedDisplayName", "groupedUrl", "eventCode", "venueName", "venueTown", "venueId", "venueUrl", "media", "categories.name" ] } } } } } }
'
Is any of you know where the issue could be?
Whenever possible, you don't want to use the "LowLevel" stuff. Instead, use what is available to you on the IElasticClient. Here is an example of how to use IElasticClient.MultiSearch to run 3 searches using the fluent syntax (which is the preferred way to do this).
var mSearchResponse = ElasticClient.MultiSearch(msearch => msearch
.Search<RedemptionES>(
s1 => s1.Query(
q=>q.Term(
t=> t.OnField(f=> f.Id).Value("123")
)
)
)
.Search<RedemptionES>(
s2 => s2.Query(
q => q.Term(
t => t.OnField(f => f.Id).Value("456")
)
)
)
.Search<RedemptionES>(
s3 => s3.Query(
q => q.Term(
t => t.OnField(f => f.Id).Value("789")
)
)
)
);
Issue lies on indention. Try this:
public static string qu = #"{""index"" : ""search_results""}
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""name"": ""manchester"" } } ] } }, ""aggs"": { ""event_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } }
{""index"" : ""search_results2""}
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""venueName"": ""Manchester"" } } ] } }, ""aggs"": { ""venue_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } }
{""index"" : ""search_results3""}
{ ""size"": 0, ""query"": { ""bool"": { ""must"": [ { ""term"": { ""partnersites"": ""16"" } }, { ""match_phrase_prefix"": { ""venueTown"": ""manchester"" } } ] } }, ""aggs"": { ""location_results"": { ""terms"": { ""field"": ""name.keyword"", ""size"": 1 }, ""aggs"": { ""top_tag_hits"": { ""top_hits"": { ""size"": 1, ""_source"": [ ""name"", ""groupedName"", ""groupedDisplayName"", ""groupedUrl"", ""eventCode"", ""venueName"", ""venueTown"", ""venueId"", ""venueUrl"", ""media"", ""categories.name"" ] } } } } } }
";
var result = _elasticClient.LowLevel.Msearch<string>(qu).Body; // Query ES for results.

ng-repeat on ng-table in angularjs. Multiple Dynamic Tables

Want to repeat an ng-table and ng rows both from a nested table. How to repeat the table from a nested json. for example json may be :
{
"service_info":{
"service_name":"heading1",
"sl_id":3,
"stack":1
},
"instance_info":[
{
"instance_id":1,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
},
{
"instance_id":2,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
}
]
},
{
"service_info":{
"service_name":"heading2",
"sl_id":3,
"stack":1
},
"instance_info":[
{
"instance_id":1,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
},
{
"instance_id":2,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
}
]
}
need service info as the table heading and instance info as a table row in ng-table. if I use tableparams in it no data is displayed.
After using the trick suggested by #GrumbleSnatch I could get the desired result and here it goes.
$scope.ilist={
"service_info":{
"service_name":"heading1",
"sl_id":3,
"stack":1
},
"instance_info":[
{
"instance_id":1,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
},
{
"instance_id":2,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
}
]
},
{
"service_info":{
"service_name":"heading2",
"sl_id":3,
"stack":1
},
"instance_info":[
{
"instance_id":1,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
},
{
"instance_id":2,
"possible_actions":{
"actions":[
{
"action_name":"modify",
"action_id":2
},
{
"action_name":"deprovision",
"action_id":3
}
]
}
}
]
};
$scope.tabledata=[];
for (var i=0;i< $scope.ilist.length;i++){
$scope.tabledata[i]={};
var datat=$scope.ilist[i];
$scope.tabledata[i].tableParams = new ngTableParams({
page: 1,
count: 10
}, {
total: datat.instance_info.length,
getData: function($defer, params) {
$scope.displayingItems=datat.instance_info.slice((params.page() - 1) * params.count(), params.page() * params.count()).length;
$defer.resolve(datat.instance_info.slice((params.page() - 1) * params.count(), params.page() * params.count()));
}
});
}
and Html goes like this:
<div ng-repeat="instanceList in ilist track by $index">
<h3>{{instanceList.service_info.service_name}}</h3>
<table class="table table-striped table-bordered text-left alignment" class="table" ng-table="tabledata[$index].tableParams" style="margin-top: 20px;">
<tr ng-repeat="instance in $data">
<td data-title="'Instance Name'">
<a style="cursor: pointer; color: #000000; text-decoration: none;">
{{instanceList.service_info.service_name}}_{{instance.instance_id}}
</a>
</td>
</tr>
</table>
</div>