VOTING POWER100.00%
DOWNVOTE POWER100.00%
RESOURCE CREDITS100.00%
REPUTATION PROGRESS0.00%
Net Worth
0.036USD
STEEM
0.000STEEM
SBD
0.000SBD
Effective Power
5.007SP
├── Own SP
0.629SP
└── Incoming DelegationsDeleg
+4.378SP
Detailed Balance
| STEEM | ||
| balance | 0.000STEEM | STEEM |
| market_balance | 0.000STEEM | STEEM |
| savings_balance | 0.000STEEM | STEEM |
| reward_steem_balance | 0.000STEEM | STEEM |
| STEEM POWER | ||
| Own SP | 0.629SP | SP |
| Delegated Out | 0.000SP | SP |
| Delegation In | 4.378SP | SP |
| Effective Power | 5.007SP | SP |
| Reward SP (pending) | 0.000SP | SP |
| SBD | ||
| sbd_balance | 0.000SBD | SBD |
| sbd_conversions | 0.000SBD | SBD |
| sbd_market_balance | 0.000SBD | SBD |
| savings_sbd_balance | 0.000SBD | SBD |
| reward_sbd_balance | 0.000SBD | SBD |
{
"balance": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"reward_steem_balance": "0.000 STEEM",
"vesting_shares": "1022.664316 VESTS",
"delegated_vesting_shares": "0.000000 VESTS",
"received_vesting_shares": "7120.995490 VESTS",
"sbd_balance": "0.000 SBD",
"savings_sbd_balance": "0.000 SBD",
"reward_sbd_balance": "0.000 SBD",
"conversions": []
}Account Info
| name | snya |
| id | 733618 |
| rank | 579,866 |
| reputation | 63344042 |
| created | 2018-02-07T16:28:42 |
| recovery_account | steem |
| proxy | None |
| post_count | 4 |
| comment_count | 0 |
| lifetime_vote_count | 0 |
| witnesses_voted_for | 0 |
| last_post | 2018-02-20T09:26:30 |
| last_root_post | 2018-02-20T09:26:30 |
| last_vote_time | 2018-02-20T09:26:30 |
| proxied_vsf_votes | 0, 0, 0, 0 |
| can_vote | 1 |
| voting_power | 0 |
| delayed_votes | 0 |
| balance | 0.000 STEEM |
| savings_balance | 0.000 STEEM |
| sbd_balance | 0.000 SBD |
| savings_sbd_balance | 0.000 SBD |
| vesting_shares | 1022.664316 VESTS |
| delegated_vesting_shares | 0.000000 VESTS |
| received_vesting_shares | 7120.995490 VESTS |
| reward_vesting_balance | 0.000000 VESTS |
| vesting_balance | 0.000 STEEM |
| vesting_withdraw_rate | 0.000000 VESTS |
| next_vesting_withdrawal | 1969-12-31T23:59:59 |
| withdrawn | 0 |
| to_withdraw | 0 |
| withdraw_routes | 0 |
| savings_withdraw_requests | 0 |
| last_account_recovery | 1970-01-01T00:00:00 |
| reset_account | null |
| last_owner_update | 1970-01-01T00:00:00 |
| last_account_update | 2018-02-07T16:37:12 |
| mined | No |
| sbd_seconds | 0 |
| sbd_last_interest_payment | 1970-01-01T00:00:00 |
| savings_sbd_last_interest_payment | 1970-01-01T00:00:00 |
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM6hVF4FQz3MbdD5iXV1tUzSQigdrDaBjLwZPsnLDvubbQoAENp7",
1
]
],
"weight_threshold": 1
},
"balance": "0.000 STEEM",
"can_vote": true,
"comment_count": 0,
"created": "2018-02-07T16:28:42",
"curation_rewards": 0,
"delegated_vesting_shares": "0.000000 VESTS",
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779086478
},
"guest_bloggers": [],
"id": 733618,
"json_metadata": "{\"profile\":{\"profile_image\":\"https://snyaggarwal.github.io/assets/images/profile2.png\",\"name\":\"Sny\",\"location\":\"Delhi, India\",\"website\":\"https://snyaggarwal.github.io\"}}",
"last_account_recovery": "1970-01-01T00:00:00",
"last_account_update": "2018-02-07T16:37:12",
"last_owner_update": "1970-01-01T00:00:00",
"last_post": "2018-02-20T09:26:30",
"last_root_post": "2018-02-20T09:26:30",
"last_vote_time": "2018-02-20T09:26:30",
"lifetime_vote_count": 0,
"market_history": [],
"memo_key": "STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi",
"mined": false,
"name": "snya",
"next_vesting_withdrawal": "1969-12-31T23:59:59",
"other_history": [],
"owner": {
"account_auths": [],
"key_auths": [
[
"STM8e9NUafenom5mT6zsoyrSDsCN86DHJF5pK6ej1zpR65zrZbqSk",
1
]
],
"weight_threshold": 1
},
"pending_claimed_accounts": 0,
"post_bandwidth": 0,
"post_count": 4,
"post_history": [],
"posting": {
"account_auths": [],
"key_auths": [
[
"STM5ic4rtacpT7dGhXpiy5dkvLdvb4vSF9kNkWFtxRSAgnqH7zCvL",
1
]
],
"weight_threshold": 1
},
"posting_json_metadata": "{\"profile\":{\"profile_image\":\"https://snyaggarwal.github.io/assets/images/profile2.png\",\"name\":\"Sny\",\"location\":\"Delhi, India\",\"website\":\"https://snyaggarwal.github.io\"}}",
"posting_rewards": 0,
"proxied_vsf_votes": [
0,
0,
0,
0
],
"proxy": "",
"received_vesting_shares": "7120.995490 VESTS",
"recovery_account": "steem",
"reputation": 63344042,
"reset_account": "null",
"reward_sbd_balance": "0.000 SBD",
"reward_steem_balance": "0.000 STEEM",
"reward_vesting_balance": "0.000000 VESTS",
"reward_vesting_steem": "0.000 STEEM",
"savings_balance": "0.000 STEEM",
"savings_sbd_balance": "0.000 SBD",
"savings_sbd_last_interest_payment": "1970-01-01T00:00:00",
"savings_sbd_seconds": "0",
"savings_sbd_seconds_last_update": "1970-01-01T00:00:00",
"savings_withdraw_requests": 0,
"sbd_balance": "0.000 SBD",
"sbd_last_interest_payment": "1970-01-01T00:00:00",
"sbd_seconds": "0",
"sbd_seconds_last_update": "1970-01-01T00:00:00",
"tags_usage": [],
"to_withdraw": 0,
"transfer_history": [],
"vesting_balance": "0.000 STEEM",
"vesting_shares": "1022.664316 VESTS",
"vesting_withdraw_rate": "0.000000 VESTS",
"vote_history": [],
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779086478
},
"voting_power": 0,
"withdraw_routes": 0,
"withdrawn": 0,
"witness_votes": [],
"witnesses_voted_for": 0,
"rank": 579866
}Withdraw Routes
| Incoming | Outgoing |
|---|---|
Empty | Empty |
{
"incoming": [],
"outgoing": []
}From Date
To Date
2026/05/18 06:41:18
2026/05/18 06:41:18
| delegatee | snya |
| delegator | steem |
| vesting shares | 7120.995490 VESTS |
| Transaction Info | Block #106151137/Trx 1b9c539477460b2ea0fa9390d35879f10eda4f76 |
View Raw JSON Data
{
"block": 106151137,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "7120.995490 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-18T06:41:18",
"trx_id": "1b9c539477460b2ea0fa9390d35879f10eda4f76",
"trx_in_block": 0,
"virtual_op": 0
}2026/05/13 06:01:18
2026/05/13 06:01:18
| delegatee | snya |
| delegator | steem |
| vesting shares | 4408.785085 VESTS |
| Transaction Info | Block #106007054/Trx 8f6b9a9adc55281202d5a73e5ba74c161b961f61 |
View Raw JSON Data
{
"block": 106007054,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "4408.785085 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-05-13T06:01:18",
"trx_id": "8f6b9a9adc55281202d5a73e5ba74c161b961f61",
"trx_in_block": 0,
"virtual_op": 0
}2026/04/26 05:52:30
2026/04/26 05:52:30
| delegatee | snya |
| delegator | steem |
| vesting shares | 7133.511246 VESTS |
| Transaction Info | Block #105518610/Trx ce3ef29f88107f9908e87618a0f37a1f4dec5542 |
View Raw JSON Data
{
"block": 105518610,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "7133.511246 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-04-26T05:52:30",
"trx_id": "ce3ef29f88107f9908e87618a0f37a1f4dec5542",
"trx_in_block": 0,
"virtual_op": 0
}2026/01/24 01:08:21
2026/01/24 01:08:21
| delegatee | snya |
| delegator | steem |
| vesting shares | 4450.331904 VESTS |
| Transaction Info | Block #102872579/Trx 3caee4184483d5d3ae97d0743d8890f7832139c1 |
View Raw JSON Data
{
"block": 102872579,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "4450.331904 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2026-01-24T01:08:21",
"trx_id": "3caee4184483d5d3ae97d0743d8890f7832139c1",
"trx_in_block": 0,
"virtual_op": 0
}2024/12/17 20:18:06
2024/12/17 20:18:06
| delegatee | snya |
| delegator | steem |
| vesting shares | 4614.551101 VESTS |
| Transaction Info | Block #91318789/Trx d69369d0bffd20a7ed0eda6d1ab63b1032dc10fb |
View Raw JSON Data
{
"block": 91318789,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "4614.551101 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2024-12-17T20:18:06",
"trx_id": "d69369d0bffd20a7ed0eda6d1ab63b1032dc10fb",
"trx_in_block": 0,
"virtual_op": 0
}2023/11/14 11:58:39
2023/11/14 11:58:39
| delegatee | snya |
| delegator | steem |
| vesting shares | 4783.684633 VESTS |
| Transaction Info | Block #79872922/Trx c6eab0212001ab658dd15cfb5ceca6ff7bb278d7 |
View Raw JSON Data
{
"block": 79872922,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "4783.684633 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-11-14T11:58:39",
"trx_id": "c6eab0212001ab658dd15cfb5ceca6ff7bb278d7",
"trx_in_block": 4,
"virtual_op": 0
}2023/09/22 10:52:42
2023/09/22 10:52:42
| delegatee | snya |
| delegator | steem |
| vesting shares | 7720.593419 VESTS |
| Transaction Info | Block #78363449/Trx 9a4df650bb898e055226fb9c444f37ead0250889 |
View Raw JSON Data
{
"block": 78363449,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "7720.593419 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2023-09-22T10:52:42",
"trx_id": "9a4df650bb898e055226fb9c444f37ead0250889",
"trx_in_block": 2,
"virtual_op": 0
}2022/11/03 18:16:27
2022/11/03 18:16:27
| delegatee | snya |
| delegator | steem |
| vesting shares | 7942.644857 VESTS |
| Transaction Info | Block #69121110/Trx 4911e401c159b09fe0d6fcb7697de24a8b5738ed |
View Raw JSON Data
{
"block": 69121110,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "7942.644857 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-11-03T18:16:27",
"trx_id": "4911e401c159b09fe0d6fcb7697de24a8b5738ed",
"trx_in_block": 4,
"virtual_op": 0
}2022/01/17 23:25:57
2022/01/17 23:25:57
| delegatee | snya |
| delegator | steem |
| vesting shares | 8162.752458 VESTS |
| Transaction Info | Block #60824311/Trx 040fffdca7db2c0819a3ed029e0922d21445f5ae |
View Raw JSON Data
{
"block": 60824311,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8162.752458 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2022-01-17T23:25:57",
"trx_id": "040fffdca7db2c0819a3ed029e0922d21445f5ae",
"trx_in_block": 6,
"virtual_op": 0
}2021/06/14 06:35:39
2021/06/14 06:35:39
| delegatee | snya |
| delegator | steem |
| vesting shares | 8346.946746 VESTS |
| Transaction Info | Block #54614610/Trx 0245493e051d1d1236bcd320b24c128d25109de5 |
View Raw JSON Data
{
"block": 54614610,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8346.946746 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2021-06-14T06:35:39",
"trx_id": "0245493e051d1d1236bcd320b24c128d25109de5",
"trx_in_block": 2,
"virtual_op": 0
}2020/12/11 16:47:27
2020/12/11 16:47:27
| delegatee | snya |
| delegator | steem |
| vesting shares | 8534.368720 VESTS |
| Transaction Info | Block #49361859/Trx b9d179ce8eb45d8522d1a69ba21b9a5802bfbe2f |
View Raw JSON Data
{
"block": 49361859,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8534.368720 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-11T16:47:27",
"trx_id": "b9d179ce8eb45d8522d1a69ba21b9a5802bfbe2f",
"trx_in_block": 1,
"virtual_op": 0
}2020/12/06 10:22:57
2020/12/06 10:22:57
| delegatee | snya |
| delegator | steem |
| vesting shares | 1912.543513 VESTS |
| Transaction Info | Block #49213375/Trx 3715a252e1687e87294f1b984463cb6df8588481 |
View Raw JSON Data
{
"block": 49213375,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "1912.543513 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-06T10:22:57",
"trx_id": "3715a252e1687e87294f1b984463cb6df8588481",
"trx_in_block": 0,
"virtual_op": 0
}2020/12/05 20:25:18
2020/12/05 20:25:18
| delegatee | snya |
| delegator | steem |
| vesting shares | 8540.576574 VESTS |
| Transaction Info | Block #49196945/Trx 3c7c60763d83617cd14a2005885aef1167d19f32 |
View Raw JSON Data
{
"block": 49196945,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8540.576574 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-12-05T20:25:18",
"trx_id": "3c7c60763d83617cd14a2005885aef1167d19f32",
"trx_in_block": 2,
"virtual_op": 0
}2020/11/03 03:22:57
2020/11/03 03:22:57
| delegatee | snya |
| delegator | steem |
| vesting shares | 1920.017158 VESTS |
| Transaction Info | Block #48271626/Trx 342713d833a3d350a712bbe9519b2c4232954b9e |
View Raw JSON Data
{
"block": 48271626,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "1920.017158 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-11-03T03:22:57",
"trx_id": "342713d833a3d350a712bbe9519b2c4232954b9e",
"trx_in_block": 1,
"virtual_op": 0
}2020/05/09 11:26:33
2020/05/09 11:26:33
| delegatee | snya |
| delegator | steem |
| vesting shares | 8743.381933 VESTS |
| Transaction Info | Block #43223712/Trx 1399fd4c58393def6a1ee842fd83a30e7d0b89f7 |
View Raw JSON Data
{
"block": 43223712,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8743.381933 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-09T11:26:33",
"trx_id": "1399fd4c58393def6a1ee842fd83a30e7d0b89f7",
"trx_in_block": 16,
"virtual_op": 0
}2020/05/08 15:53:42
2020/05/08 15:53:42
| delegatee | snya |
| delegator | steem |
| vesting shares | 1953.311140 VESTS |
| Transaction Info | Block #43200814/Trx 73daf27a1fbb79afbe796572a93612f0da732b79 |
View Raw JSON Data
{
"block": 43200814,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "1953.311140 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-05-08T15:53:42",
"trx_id": "73daf27a1fbb79afbe796572a93612f0da732b79",
"trx_in_block": 8,
"virtual_op": 0
}2020/04/21 20:52:54
2020/04/21 20:52:54
| delegatee | snya |
| delegator | steem |
| vesting shares | 8753.117600 VESTS |
| Transaction Info | Block #42729409/Trx 9106984237a0b82446814eda7714d022aeee5347 |
View Raw JSON Data
{
"block": 42729409,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8753.117600 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2020-04-21T20:52:54",
"trx_id": "9106984237a0b82446814eda7714d022aeee5347",
"trx_in_block": 0,
"virtual_op": 0
}2020/02/07 17:41:27
2020/02/07 17:41:27
| author | steemitboard |
| body | Congratulations @snya! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@snya/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table> <sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@snya) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=snya)_</sub> **Do not miss the last post from @steemitboard:** <table><tr><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator"><img src="https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png"></a></td><td><a href="https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table> ###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | snya |
| parent permlink | top-3-ico-listing-sites |
| permlink | steemitboard-notify-snya-20200207t174127000z |
| title | |
| Transaction Info | Block #40616997/Trx 33f5adb541a8e4ad397c6e9563becf8b062649f7 |
View Raw JSON Data
{
"block": 40616997,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @snya! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@snya/birthday2.png</td><td>Happy Birthday! - You are on the Steem blockchain for 2 years!</td></tr></table>\n\n<sub>_You can view [your badges on your Steem Board](https://steemitboard.com/@snya) and compare to others on the [Steem Ranking](https://steemitboard.com/ranking/index.php?name=snya)_</sub>\n\n\n**Do not miss the last post from @steemitboard:**\n<table><tr><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\"><img src=\"https://steemitimages.com/64x128/https://cdn.steemitimages.com/DQmfRVpHQhLDhnjDtqck8GPv9NPvNKPfMsDaAFDE1D9Er2Z/header_ranking.png\"></a></td><td><a href=\"https://steemit.com/steemitboard/@steemitboard/steemitboard-ranking-update-a-better-rich-list-comparator\">SteemitBoard Ranking update - A better rich list comparator</a></td></tr></table>\n\n###### [Vote for @Steemitboard as a witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1) to get one more award and increased upvotes!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "snya",
"parent_permlink": "top-3-ico-listing-sites",
"permlink": "steemitboard-notify-snya-20200207t174127000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2020-02-07T17:41:27",
"trx_id": "33f5adb541a8e4ad397c6e9563becf8b062649f7",
"trx_in_block": 5,
"virtual_op": 0
}2019/05/18 05:20:39
2019/05/18 05:20:39
| delegatee | snya |
| delegator | steem |
| vesting shares | 8948.659821 VESTS |
| Transaction Info | Block #33006713/Trx c54a080c3c4fd0c91053f9a1654aab85d046e3bf |
View Raw JSON Data
{
"block": 33006713,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "8948.659821 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2019-05-18T05:20:39",
"trx_id": "c54a080c3c4fd0c91053f9a1654aab85d046e3bf",
"trx_in_block": 13,
"virtual_op": 0
}2019/02/07 17:00:21
2019/02/07 17:00:21
| author | steemitboard |
| body | Congratulations @snya! You received a personal award! <table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@snya/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table> <sub>_[Click here to view your Board](https://steemitboard.com/@snya)_</sub> > Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**! |
| json metadata | {"image":["https://steemitboard.com/img/notify.png"]} |
| parent author | snya |
| parent permlink | top-3-ico-listing-sites |
| permlink | steemitboard-notify-snya-20190207t170021000z |
| title | |
| Transaction Info | Block #30144121/Trx be57a0719fde45d2b2584d048644acaf1dfc0b5e |
View Raw JSON Data
{
"block": 30144121,
"op": [
"comment",
{
"author": "steemitboard",
"body": "Congratulations @snya! You received a personal award!\n\n<table><tr><td>https://steemitimages.com/70x70/http://steemitboard.com/@snya/birthday1.png</td><td>Happy Birthday! - You are on the Steem blockchain for 1 year!</td></tr></table>\n\n<sub>_[Click here to view your Board](https://steemitboard.com/@snya)_</sub>\n\n\n> Support [SteemitBoard's project](https://steemit.com/@steemitboard)! **[Vote for its witness](https://v2.steemconnect.com/sign/account-witness-vote?witness=steemitboard&approve=1)** and **get one more award**!",
"json_metadata": "{\"image\":[\"https://steemitboard.com/img/notify.png\"]}",
"parent_author": "snya",
"parent_permlink": "top-3-ico-listing-sites",
"permlink": "steemitboard-notify-snya-20190207t170021000z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2019-02-07T17:00:21",
"trx_id": "be57a0719fde45d2b2584d048644acaf1dfc0b5e",
"trx_in_block": 9,
"virtual_op": 0
}2018/05/23 06:21:03
2018/05/23 06:21:03
| delegatee | snya |
| delegator | steem |
| vesting shares | 9148.133689 VESTS |
| Transaction Info | Block #22674688/Trx c0417e026b42f7212adaf978d03f18797f8cc365 |
View Raw JSON Data
{
"block": 22674688,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "9148.133689 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-23T06:21:03",
"trx_id": "c0417e026b42f7212adaf978d03f18797f8cc365",
"trx_in_block": 46,
"virtual_op": 0
}2018/05/19 09:08:45
2018/05/19 09:08:45
| delegatee | snya |
| delegator | steem |
| vesting shares | 29496.530393 VESTS |
| Transaction Info | Block #22562864/Trx 41d6c07c53b534f57e456f791f9593ef7fd9631e |
View Raw JSON Data
{
"block": 22562864,
"op": [
"delegate_vesting_shares",
{
"delegatee": "snya",
"delegator": "steem",
"vesting_shares": "29496.530393 VESTS"
}
],
"op_in_trx": 0,
"timestamp": "2018-05-19T09:08:45",
"trx_id": "41d6c07c53b534f57e456f791f9593ef7fd9631e",
"trx_in_block": 23,
"virtual_op": 0
}2018/04/15 17:10:30
2018/04/15 17:10:30
| author | alsuwinogradova |
| body | not all resources are taken into account. I think the most complete data is contained here: https://cryptototem.com/ico-list/ |
| json metadata | {"tags":["ico"],"links":["https://cryptototem.com/ico-list/"],"app":"steemit/0.1"} |
| parent author | snya |
| parent permlink | top-3-ico-listing-sites |
| permlink | re-snya-top-3-ico-listing-sites-20180415t171029507z |
| title | |
| Transaction Info | Block #21594127/Trx 4a875cd00646aecbbfa9ce93bcfb8071c7992abd |
View Raw JSON Data
{
"block": 21594127,
"op": [
"comment",
{
"author": "alsuwinogradova",
"body": "not all resources are taken into account.\nI think the most complete data is contained here:\nhttps://cryptototem.com/ico-list/",
"json_metadata": "{\"tags\":[\"ico\"],\"links\":[\"https://cryptototem.com/ico-list/\"],\"app\":\"steemit/0.1\"}",
"parent_author": "snya",
"parent_permlink": "top-3-ico-listing-sites",
"permlink": "re-snya-top-3-ico-listing-sites-20180415t171029507z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-04-15T17:10:30",
"trx_id": "4a875cd00646aecbbfa9ce93bcfb8071c7992abd",
"trx_in_block": 34,
"virtual_op": 0
}2018/02/21 05:42:15
2018/02/21 05:42:15
| id | follow |
| json | ["follow",{"follower":"snya","following":"sofash","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20055681/Trx 6b35665454b76006657880efda2d50e5f1ffd58c |
View Raw JSON Data
{
"block": 20055681,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"sofash\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-21T05:42:15",
"trx_id": "6b35665454b76006657880efda2d50e5f1ffd58c",
"trx_in_block": 57,
"virtual_op": 0
}2018/02/20 10:46:42
2018/02/20 10:46:42
| id | follow |
| json | ["follow",{"follower":"snya","following":"zapper","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20032972/Trx fd73a524c8d85b826a1f61f0b586bb05f98647c5 |
View Raw JSON Data
{
"block": 20032972,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"zapper\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T10:46:42",
"trx_id": "fd73a524c8d85b826a1f61f0b586bb05f98647c5",
"trx_in_block": 27,
"virtual_op": 0
}sofashupvoted (100.00%) @snya / top-3-ico-listing-sites2018/02/20 10:46:18
sofashupvoted (100.00%) @snya / top-3-ico-listing-sites
2018/02/20 10:46:18
| author | snya |
| permlink | top-3-ico-listing-sites |
| voter | sofash |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20032964/Trx 9c59f042c73439b01bb6ff4f631fb71b165d1c48 |
View Raw JSON Data
{
"block": 20032964,
"op": [
"vote",
{
"author": "snya",
"permlink": "top-3-ico-listing-sites",
"voter": "sofash",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T10:46:18",
"trx_id": "9c59f042c73439b01bb6ff4f631fb71b165d1c48",
"trx_in_block": 23,
"virtual_op": 0
}zapperupvoted (1.00%) @snya / top-3-ico-listing-sites2018/02/20 09:37:36
zapperupvoted (1.00%) @snya / top-3-ico-listing-sites
2018/02/20 09:37:36
| author | snya |
| permlink | top-3-ico-listing-sites |
| voter | zapper |
| weight | 100 (1.00%) |
| Transaction Info | Block #20031590/Trx c8336ecaa74c81bddc9c14e6cca6e454816d2567 |
View Raw JSON Data
{
"block": 20031590,
"op": [
"vote",
{
"author": "snya",
"permlink": "top-3-ico-listing-sites",
"voter": "zapper",
"weight": 100
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T09:37:36",
"trx_id": "c8336ecaa74c81bddc9c14e6cca6e454816d2567",
"trx_in_block": 7,
"virtual_op": 0
}gauravbutolaupvoted (100.00%) @snya / top-3-ico-listing-sites2018/02/20 09:27:12
gauravbutolaupvoted (100.00%) @snya / top-3-ico-listing-sites
2018/02/20 09:27:12
| author | snya |
| permlink | top-3-ico-listing-sites |
| voter | gauravbutola |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20031382/Trx 7e58a7f0acb0e04c4e8d362d802ab331b1968d6e |
View Raw JSON Data
{
"block": 20031382,
"op": [
"vote",
{
"author": "snya",
"permlink": "top-3-ico-listing-sites",
"voter": "gauravbutola",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T09:27:12",
"trx_id": "7e58a7f0acb0e04c4e8d362d802ab331b1968d6e",
"trx_in_block": 22,
"virtual_op": 0
}snyaupvoted (100.00%) @snya / top-3-ico-listing-sites2018/02/20 09:26:30
snyaupvoted (100.00%) @snya / top-3-ico-listing-sites
2018/02/20 09:26:30
| author | snya |
| permlink | top-3-ico-listing-sites |
| voter | snya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #20031368/Trx bb280d334878a0ebe2b1c37e216063fa0c532ca4 |
View Raw JSON Data
{
"block": 20031368,
"op": [
"vote",
{
"author": "snya",
"permlink": "top-3-ico-listing-sites",
"voter": "snya",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T09:26:30",
"trx_id": "bb280d334878a0ebe2b1c37e216063fa0c532ca4",
"trx_in_block": 17,
"virtual_op": 0
}snyapublished a new post: top-3-ico-listing-sites2018/02/20 09:26:30
snyapublished a new post: top-3-ico-listing-sites
2018/02/20 09:26:30
| author | snya |
| body | 1. ListICO (https://www.listico.io) - One of the most popular ICO listing website. Their Upcoming ICOs and ongoing ICOs list is updated daily. 2. BestCoins (https://www.bestcoins.co) - Bestcoins is an open community of ICO investors, technology enthusiast and founders. It is an alternative to Telegram. 3. Top ICO List (https://topicolist.com) - Top ICO List is the trusted source for enriched information that can be used by investors, analysts, journalists, and anyone interested. |
| json metadata | {"tags":["ico","blockchain","technology","cryptocurrency","coins"],"links":["https://www.listico.io","https://www.bestcoins.co","https://topicolist.com"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | ico |
| permlink | top-3-ico-listing-sites |
| title | Top 3 ICO Listing sites |
| Transaction Info | Block #20031368/Trx bb280d334878a0ebe2b1c37e216063fa0c532ca4 |
View Raw JSON Data
{
"block": 20031368,
"op": [
"comment",
{
"author": "snya",
"body": "1. ListICO (https://www.listico.io) - One of the most popular ICO listing website. Their Upcoming ICOs and ongoing ICOs list is updated daily.\n2. BestCoins (https://www.bestcoins.co) - Bestcoins is an open community of ICO investors, technology enthusiast and founders. It is an alternative to Telegram.\n3. Top ICO List (https://topicolist.com) - Top ICO List is the trusted source for enriched information that can be used by investors, analysts, journalists, and anyone interested.",
"json_metadata": "{\"tags\":[\"ico\",\"blockchain\",\"technology\",\"cryptocurrency\",\"coins\"],\"links\":[\"https://www.listico.io\",\"https://www.bestcoins.co\",\"https://topicolist.com\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "ico",
"permlink": "top-3-ico-listing-sites",
"title": "Top 3 ICO Listing sites"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T09:26:30",
"trx_id": "bb280d334878a0ebe2b1c37e216063fa0c532ca4",
"trx_in_block": 17,
"virtual_op": 0
}snyafollowed @donkeypong2018/02/20 08:20:27
snyafollowed @donkeypong
2018/02/20 08:20:27
| id | follow |
| json | ["follow",{"follower":"snya","following":"donkeypong","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030047/Trx 179cb26e0604e8b20c6562faa224e543605c7a06 |
View Raw JSON Data
{
"block": 20030047,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"donkeypong\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:20:27",
"trx_id": "179cb26e0604e8b20c6562faa224e543605c7a06",
"trx_in_block": 1,
"virtual_op": 0
}snyafollowed @fyrstikken2018/02/20 08:20:15
snyafollowed @fyrstikken
2018/02/20 08:20:15
| id | follow |
| json | ["follow",{"follower":"snya","following":"fyrstikken","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030043/Trx 3e65ba6a0dc3d394ea456f8670dad7654109912d |
View Raw JSON Data
{
"block": 20030043,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"fyrstikken\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:20:15",
"trx_id": "3e65ba6a0dc3d394ea456f8670dad7654109912d",
"trx_in_block": 23,
"virtual_op": 0
}snyafollowed @jerrybanfield2018/02/20 08:20:00
snyafollowed @jerrybanfield
2018/02/20 08:20:00
| id | follow |
| json | ["follow",{"follower":"snya","following":"jerrybanfield","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030038/Trx 822a468e37998a2b5eca28042cca0aa30cac6855 |
View Raw JSON Data
{
"block": 20030038,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"jerrybanfield\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:20:00",
"trx_id": "822a468e37998a2b5eca28042cca0aa30cac6855",
"trx_in_block": 35,
"virtual_op": 0
}snyafollowed @cryptoriddler2018/02/20 08:19:48
snyafollowed @cryptoriddler
2018/02/20 08:19:48
| id | follow |
| json | ["follow",{"follower":"snya","following":"cryptoriddler","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030034/Trx 15586f2350f085b3578a9d843d6df56e3b2e5568 |
View Raw JSON Data
{
"block": 20030034,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"cryptoriddler\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:19:48",
"trx_id": "15586f2350f085b3578a9d843d6df56e3b2e5568",
"trx_in_block": 31,
"virtual_op": 0
}snyafollowed @cryptoworld772018/02/20 08:19:48
snyafollowed @cryptoworld77
2018/02/20 08:19:48
| id | follow |
| json | ["follow",{"follower":"snya","following":"cryptoworld77","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030034/Trx f654d663faa48245df60744234ac2df46b5f6676 |
View Raw JSON Data
{
"block": 20030034,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"cryptoworld77\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:19:48",
"trx_id": "f654d663faa48245df60744234ac2df46b5f6676",
"trx_in_block": 15,
"virtual_op": 0
}snyafollowed @gauravbutola2018/02/20 08:19:45
snyafollowed @gauravbutola
2018/02/20 08:19:45
| id | follow |
| json | ["follow",{"follower":"snya","following":"gauravbutola","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #20030033/Trx f619f5782ca6adabf73107795762be52a51e7163 |
View Raw JSON Data
{
"block": 20030033,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"gauravbutola\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-20T08:19:45",
"trx_id": "f619f5782ca6adabf73107795762be52a51e7163",
"trx_in_block": 42,
"virtual_op": 0
}gauravbutolaupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast2018/02/17 06:06:27
gauravbutolaupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast
2018/02/17 06:06:27
| author | snya |
| permlink | self-love-and-the-art-of-breakfast |
| voter | gauravbutola |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19940998/Trx 3c1d744f4e026b3d0bce8a60fb51208da7c8af40 |
View Raw JSON Data
{
"block": 19940998,
"op": [
"vote",
{
"author": "snya",
"permlink": "self-love-and-the-art-of-breakfast",
"voter": "gauravbutola",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-17T06:06:27",
"trx_id": "3c1d744f4e026b3d0bce8a60fb51208da7c8af40",
"trx_in_block": 10,
"virtual_op": 0
}2018/02/15 12:20:33
2018/02/15 12:20:33
| author | snya |
| body | Glad you liked it! |
| json metadata | {"tags":["food"],"app":"steemit/0.1"} |
| parent author | universalpro |
| parent permlink | re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z |
| permlink | re-universalpro-re-snya-self-love-and-the-art-of-breakfast-20180215t122031763z |
| title | |
| Transaction Info | Block #19890927/Trx a783538a88ff9664bb4cc1ad880099bceb490d9d |
View Raw JSON Data
{
"block": 19890927,
"op": [
"comment",
{
"author": "snya",
"body": "Glad you liked it!",
"json_metadata": "{\"tags\":[\"food\"],\"app\":\"steemit/0.1\"}",
"parent_author": "universalpro",
"parent_permlink": "re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z",
"permlink": "re-universalpro-re-snya-self-love-and-the-art-of-breakfast-20180215t122031763z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-15T12:20:33",
"trx_id": "a783538a88ff9664bb4cc1ad880099bceb490d9d",
"trx_in_block": 28,
"virtual_op": 0
}snyaupvoted (100.00%) @universalpro / re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z2018/02/15 12:19:21
snyaupvoted (100.00%) @universalpro / re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z
2018/02/15 12:19:21
| author | universalpro |
| permlink | re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z |
| voter | snya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19890903/Trx 816962b53b065dbc29af3f91608120fba7fc162c |
View Raw JSON Data
{
"block": 19890903,
"op": [
"vote",
{
"author": "universalpro",
"permlink": "re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z",
"voter": "snya",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-15T12:19:21",
"trx_id": "816962b53b065dbc29af3f91608120fba7fc162c",
"trx_in_block": 34,
"virtual_op": 0
}2018/02/14 14:18:48
2018/02/14 14:18:48
| author | universalpro |
| body | This recipe is just soo perfect for Breakfast looks really healthy and yummy |
| json metadata | {"tags":["food"],"app":"steemit/0.1"} |
| parent author | snya |
| parent permlink | self-love-and-the-art-of-breakfast |
| permlink | re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z |
| title | |
| Transaction Info | Block #19864519/Trx f9dff6984e87378ec2d4ba0914d53c7fde118ddb |
View Raw JSON Data
{
"block": 19864519,
"op": [
"comment",
{
"author": "universalpro",
"body": "This recipe is just soo perfect for Breakfast looks really healthy and yummy",
"json_metadata": "{\"tags\":[\"food\"],\"app\":\"steemit/0.1\"}",
"parent_author": "snya",
"parent_permlink": "self-love-and-the-art-of-breakfast",
"permlink": "re-snya-self-love-and-the-art-of-breakfast-20180214t141847640z",
"title": ""
}
],
"op_in_trx": 0,
"timestamp": "2018-02-14T14:18:48",
"trx_id": "f9dff6984e87378ec2d4ba0914d53c7fde118ddb",
"trx_in_block": 5,
"virtual_op": 0
}universalproupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast2018/02/14 14:18:21
universalproupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast
2018/02/14 14:18:21
| author | snya |
| permlink | self-love-and-the-art-of-breakfast |
| voter | universalpro |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19864510/Trx 4365c42d730e220c4e4555b10818773708071cd7 |
View Raw JSON Data
{
"block": 19864510,
"op": [
"vote",
{
"author": "snya",
"permlink": "self-love-and-the-art-of-breakfast",
"voter": "universalpro",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-14T14:18:21",
"trx_id": "4365c42d730e220c4e4555b10818773708071cd7",
"trx_in_block": 10,
"virtual_op": 0
}snyaupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast2018/02/14 14:04:45
snyaupvoted (100.00%) @snya / self-love-and-the-art-of-breakfast
2018/02/14 14:04:45
| author | snya |
| permlink | self-love-and-the-art-of-breakfast |
| voter | snya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19864238/Trx 3033e824ed58d13d4bffaaa83f6ef5dcd432c06a |
View Raw JSON Data
{
"block": 19864238,
"op": [
"vote",
{
"author": "snya",
"permlink": "self-love-and-the-art-of-breakfast",
"voter": "snya",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-14T14:04:45",
"trx_id": "3033e824ed58d13d4bffaaa83f6ef5dcd432c06a",
"trx_in_block": 8,
"virtual_op": 0
}snyapublished a new post: self-love-and-the-art-of-breakfast2018/02/14 14:04:45
snyapublished a new post: self-love-and-the-art-of-breakfast
2018/02/14 14:04:45
| author | snya |
| body | Successful adulting involves constantly trying to strike a balance between the new and the old, the personal and the professional, the heart and the mind. With constant emphasis on breakfast being the most important meal of the day, adulting has been a lot about finding that perfect breakfast concoction that is high on nutrition and low on preparation time. It has to feel right to keep your energy levels high for the first and most active part of your day while also giving you the feeling that you’ve started your day on a positive note by pampering yourself.  The art of breakfast, as we know it, is all about a feel-good factor and the right mix of imagination and preparation. Here is food for thought to make your breakfast the meal you’d want to relish everyday: 1. Put on the chef’s hat Whether you prepare your own breakfast or you are amongst the lucky few to have a cook do it for you, make sure to be actively involved in the preparation of your breakfast. The aroma will wake up your senses that are still brooding over the alarm. 2. Color therapy Set up the table and add color to your food as well as to your tableware. Don’t underestimate the sight of bright and beautiful hues, they are known to perk up your energy levels and jumpstart your day. 3. Don’t aim too high! Keep your options simple and healthy – choose between a variety of egg preparations, pancakes, fruits, sandwich combinations, salad portions, or good old muesli and milk. 4. Time for yourself Take out time in the morning for yourself. Don’t be afraid to start your day with things you love. Don’t feel guilty about that longish bath you took, or that extra time to relish your meal. 5. Weekend bliss All that has been put off for the weekend needs to be on priority list. Try perfecting that dish you think will take up too much time on a weekday morning, arrange your cutlery for easy access when you are in a hurry, buy that beautiful platter you’ve been wanting to eat your cheese and cracker from! Afterword: “Breakfast! My favorite meal - and you can be so creative. I think of bowls of sparkling berries and fresh cream, baskets of Popovers and freshly squeezed orange juice, thick country bacon, hot maple syrup, pancakes and French toast - even the nutty flavor of Irish oatmeal with brown sugar and cream. Breakfast is the place I splurge with calories, then I spend the rest of the day getting them off! I love to use my prettiest table settings - crocheted placemats with lace-edged napkins and old hammered silver. And whether you are inside in front of a fire, candles burning brightly on a wintery day - or outside on a patio enjoying the morning sun - whether you are having a group of friends and family, a quiet little brunch for two, or an even quieter little brunch just for yourself, breakfast can set the mood and pace of the whole day.” – Susan Branch, American Author. |
| json metadata | {"tags":["food","life","health","new","blog"],"image":["https://steemitimages.com/DQmWrzcGkbnZGAJe84TSx9ivQqKNmvWGsgGmAauVk7rLdru/pexels-photo-107999.jpeg","https://steemitimages.com/DQmbH3iDvtzhFRBrZhR9gt8E7W7xfGqaNYbDeN9Jgj6dtzv/pexels-photo-113758.jpeg","https://steemitimages.com/DQmWRV5V6BtFKJ99M4uaJ9xkDbshtFLgqPS5ZbuAHQheMy1/pexels-photo-245513.jpeg","https://steemitimages.com/DQmWfSVJtZZCGZ3j7w1haN1RZq2GgfKgrat6rgF7JJqveBY/love-pen-bed-drinking.jpg","https://steemitimages.com/DQmRc6TzxkcUGUd37Vh3c9PWvbKRGxiDGzzNzMq21WAgni8/pexels-photo-265186.jpeg"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | food |
| permlink | self-love-and-the-art-of-breakfast |
| title | Self Love & The Art of Breakfast |
| Transaction Info | Block #19864238/Trx 3033e824ed58d13d4bffaaa83f6ef5dcd432c06a |
View Raw JSON Data
{
"block": 19864238,
"op": [
"comment",
{
"author": "snya",
"body": "Successful adulting involves constantly trying to strike a balance between the new and the old, the personal and the professional, the heart and the mind.\nWith constant emphasis on breakfast being the most important meal of the day, adulting has been a lot about finding that perfect breakfast concoction that is high on nutrition and low on preparation time. It has to feel right to keep your energy levels high for the first and most active part of your day while also giving you the feeling that you’ve started your day on a positive note by pampering yourself.\n\n\n \nThe art of breakfast, as we know it, is all about a feel-good factor and the right mix of imagination and preparation. Here is food for thought to make your breakfast the meal you’d want to relish everyday:\n \n1. Put on the chef’s hat\nWhether you prepare your own breakfast or you are amongst the lucky few to have a cook do it for you, make sure to be actively involved in the preparation of your breakfast. The aroma will wake up your senses that are still brooding over the alarm.\n\n2. Color therapy\nSet up the table and add color to your food as well as to your tableware. Don’t underestimate the sight of bright and beautiful hues, they are known to perk up your energy levels and jumpstart your day.\n\n3. Don’t aim too high!\nKeep your options simple and healthy – choose between a variety of egg preparations, pancakes, fruits, sandwich combinations, salad portions, or good old muesli and milk.\n\n4. Time for yourself\nTake out time in the morning for yourself. Don’t be afraid to start your day with things you love. Don’t feel guilty about that longish bath you took, or that extra time to relish your meal.\n\n5. Weekend bliss\nAll that has been put off for the weekend needs to be on priority list. Try perfecting that dish you think will take up too much time on a weekday morning, arrange your cutlery for easy access when you are in a hurry, buy that beautiful platter you’ve been wanting to eat your cheese and cracker from!\n\n\n\n Afterword:\n “Breakfast! My favorite meal - and you can be so creative. I think of bowls of sparkling\n berries and fresh cream, baskets of Popovers and freshly squeezed orange juice, thick\n country bacon, hot maple syrup, pancakes and French toast - even the nutty flavor of\n Irish oatmeal with brown sugar and cream. Breakfast is the place I splurge with\n calories, then I spend the rest of the day getting them off! I love to use my prettiest table\n settings - crocheted placemats with lace-edged napkins and old hammered silver. And\n whether you are inside in front of a fire, candles burning brightly on a wintery day - or\n outside on a patio enjoying the morning sun - whether you are having a group of friends\n and family, a quiet little brunch for two, or an even quieter little brunch just for yourself,\n breakfast can set the mood and pace of the whole day.” – Susan Branch, American\n Author.",
"json_metadata": "{\"tags\":[\"food\",\"life\",\"health\",\"new\",\"blog\"],\"image\":[\"https://steemitimages.com/DQmWrzcGkbnZGAJe84TSx9ivQqKNmvWGsgGmAauVk7rLdru/pexels-photo-107999.jpeg\",\"https://steemitimages.com/DQmbH3iDvtzhFRBrZhR9gt8E7W7xfGqaNYbDeN9Jgj6dtzv/pexels-photo-113758.jpeg\",\"https://steemitimages.com/DQmWRV5V6BtFKJ99M4uaJ9xkDbshtFLgqPS5ZbuAHQheMy1/pexels-photo-245513.jpeg\",\"https://steemitimages.com/DQmWfSVJtZZCGZ3j7w1haN1RZq2GgfKgrat6rgF7JJqveBY/love-pen-bed-drinking.jpg\",\"https://steemitimages.com/DQmRc6TzxkcUGUd37Vh3c9PWvbKRGxiDGzzNzMq21WAgni8/pexels-photo-265186.jpeg\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "food",
"permlink": "self-love-and-the-art-of-breakfast",
"title": "Self Love & The Art of Breakfast"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-14T14:04:45",
"trx_id": "3033e824ed58d13d4bffaaa83f6ef5dcd432c06a",
"trx_in_block": 8,
"virtual_op": 0
}gauravbutolaupvoted (100.00%) @snya / building-full-text-search-for-your-application-using-postgres2018/02/12 05:26:18
gauravbutolaupvoted (100.00%) @snya / building-full-text-search-for-your-application-using-postgres
2018/02/12 05:26:18
| author | snya |
| permlink | building-full-text-search-for-your-application-using-postgres |
| voter | gauravbutola |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19796334/Trx ec72bad56ecc95c7661ed66a0d316dcbb0f82352 |
View Raw JSON Data
{
"block": 19796334,
"op": [
"vote",
{
"author": "snya",
"permlink": "building-full-text-search-for-your-application-using-postgres",
"voter": "gauravbutola",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-12T05:26:18",
"trx_id": "ec72bad56ecc95c7661ed66a0d316dcbb0f82352",
"trx_in_block": 11,
"virtual_op": 0
}snyafollowed @fredrikaa2018/02/07 16:44:09
snyafollowed @fredrikaa
2018/02/07 16:44:09
| id | follow |
| json | ["follow",{"follower":"snya","following":"fredrikaa","what":["blog"]}] |
| required auths | [] |
| required posting auths | ["snya"] |
| Transaction Info | Block #19666183/Trx 1a4686235780fdd3e239df7f2a97b14b2f8717ff |
View Raw JSON Data
{
"block": 19666183,
"op": [
"custom_json",
{
"id": "follow",
"json": "[\"follow\",{\"follower\":\"snya\",\"following\":\"fredrikaa\",\"what\":[\"blog\"]}]",
"required_auths": [],
"required_posting_auths": [
"snya"
]
}
],
"op_in_trx": 0,
"timestamp": "2018-02-07T16:44:09",
"trx_id": "1a4686235780fdd3e239df7f2a97b14b2f8717ff",
"trx_in_block": 34,
"virtual_op": 0
}snyaupdated their account properties2018/02/07 16:37:12
snyaupdated their account properties
2018/02/07 16:37:12
| account | snya |
| json metadata | {"profile":{"profile_image":"https://snyaggarwal.github.io/assets/images/profile2.png","name":"Sny","location":"Delhi, India","website":"https://snyaggarwal.github.io"}} |
| memo key | STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi |
| Transaction Info | Block #19666045/Trx 1641972d2c022320f598124fb230f22277210dbb |
View Raw JSON Data
{
"block": 19666045,
"op": [
"account_update",
{
"account": "snya",
"json_metadata": "{\"profile\":{\"profile_image\":\"https://snyaggarwal.github.io/assets/images/profile2.png\",\"name\":\"Sny\",\"location\":\"Delhi, India\",\"website\":\"https://snyaggarwal.github.io\"}}",
"memo_key": "STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-07T16:37:12",
"trx_id": "1641972d2c022320f598124fb230f22277210dbb",
"trx_in_block": 42,
"virtual_op": 0
}snyaupvoted (100.00%) @snya / building-full-text-search-for-your-application-using-postgres2018/02/07 16:34:06
snyaupvoted (100.00%) @snya / building-full-text-search-for-your-application-using-postgres
2018/02/07 16:34:06
| author | snya |
| permlink | building-full-text-search-for-your-application-using-postgres |
| voter | snya |
| weight | 10000 (100.00%) |
| Transaction Info | Block #19665983/Trx d4ba47b884a0833fcad657a4522693bed81e1fa1 |
View Raw JSON Data
{
"block": 19665983,
"op": [
"vote",
{
"author": "snya",
"permlink": "building-full-text-search-for-your-application-using-postgres",
"voter": "snya",
"weight": 10000
}
],
"op_in_trx": 0,
"timestamp": "2018-02-07T16:34:06",
"trx_id": "d4ba47b884a0833fcad657a4522693bed81e1fa1",
"trx_in_block": 3,
"virtual_op": 0
}snyapublished a new post: building-full-text-search-for-your-application-using-postgres2018/02/07 16:34:06
snyapublished a new post: building-full-text-search-for-your-application-using-postgres
2018/02/07 16:34:06
| author | snya |
| body | Now a days when you have data, search becomes an essential part of your tool. Doesn’t matter if you have website or not, search is an important feature, which comes to mind before even starting to build the tool itself. The most popular platform in last 5 years for search that we have seen are ElasticSearch and SOLR, both are Lucene based. They are very powerful and great tools, solves almost all the tasks of search, but before going down to the route of adding these massive tools in the existing toolset, lets look at something which is bit lighter and should be good enough! When we build a basic search feature in our app, we would at least want: JSON attributes support Indexing Stemming Since the postgres > 8.3 , postgres supports full text search with all of the above feature and much more. lets see how easy it is to setup a basic search feature for your app. Lets assume following schema and data: CREATE TABLE profiles ( id SERIAL PRIMARY KEY, name TEXT ); CREATE TABLE accounts ( id SERIAL PRIMARY KEY, account_id INTEGER NOT NULL, profile_id INTEGER NOT NULL ); CREATE TABLE ads ( account_id INTEGER NOT NULL, id SERIAL PRIMARY KEY, data jsonb ); INSERT INTO profiles (id, name) VALUES (1, 'United Federation of Planets'), (2, 'Wayne Industries'); INSERT INTO accounts (id, account_id, profile_id) VALUES (1, 999, 1), (2, 998, 1), (3, 666, 2); INSERT INTO ads (id, account_id, data) VALUES (1, 999, '{"name": "Plane Accessories on sale", "ad_id": 18976, "type": "google"}'), (2, 999, '{"name": "Plane Taxi Service for free", "ad_id": 76859, "type": "twitter"}'), (3, 998, '{"name": "Plane on rent for wedding", "ad_id": 34568, "type": "youtube"}'), (4, 666, '{"name": "blow up plane training", "ad_id": 98576, "type": "Facebook"}'); The setup is for the any advertising platform, a profile, which has many accounts and each accounts has many ads. When we talk about full text search, we usually talk about a document, simply put a document is like an article or content which is the subject area of search and may be a logical entity. It may be across multiple tables. “In text retrieval, full text search refers to techniques for searching a single computer-stored document or a collection in a full text database.“ Document is not related to table schema but to data, for our use case the we could use any/all of the following as a document: profiles.name ads.data.name ads.data.ad_id ads.data.type So lets create them. SELECT profiles.name || ' ' || cast(ads.data->>'name' as text) || ' ' || cast(ads.data->>'ad_id' as text) || ' ' || cast(ads.data->>'type' as text) as document FROM ads JOIN accounts on accounts.account_id = ads.account_id JOIN profiles on profiles.id = accounts.profile_id; document ------------------------------------------------------------------ Wayne Industries plane training 98576 Facebook United Federation of Planets Plane on rent for wedding 34568 youtube United Federation of Planets Plane Accessories on sale 18976 google United Federation of Planets Plane Taxi Service for free 76859 twitter (4 rows) You can also use string_agg() function with coalesce() function in order to aggregate many strings and remove nulls. Now our document is just a simple long string, and doesn’t really optimised to be searched, we need to format this in lexemes, which is more suited and understood by postgres for full text search. “A lexeme is a sequence of characters in the source program that matches the pattern for a token and is identified by the lexical analyzer as an instance of that token” To convert the above document to lexemes postgres provides us with to_tsvector(). SELECT to_tsvector(profiles.name) || to_tsvector(cast(ads.data->>'name' as text)) || to_tsvector(cast(ads.data->>'ad_id' as text)) || to_tsvector(cast(ads.data->>'type' as text)) as document FROM ads JOIN accounts on accounts.account_id = ads.account_id JOIN profiles on profiles.id = accounts.profile_id; document ------------------------------------------------------------------ '98576':7 'blow':3 'facebook':8 'industries':2 'plane':5 'training':6 'up':4 'wayne':1 '34568':10 'federation':2 'for':8 'of':3 'on':6 'plane':5 'planets':4 'rent':7 'united':1 'wedding':9 'youtube':11 '18976':9 'accessories':6 'federation':2 'google':10 'of':3 'on':7 'plane':5 'planets':4 'sale':8 'united':1 '76859':10 'federation':2 'for':8 'free':9 'of':3 'plane':5 'planets':4 'service':7 'taxi':6 'twitter':11 'united':1 (4 rows) Now the result is slightly different. A tsvector value is a sorted list of distinct lexemes which are words that have been normalized to make different variants of the same word look alike. For example, normalization almost always includes folding upper-case letters to lower-case and often involves removal of suffixes (such as ‘s’, ‘es’ or ‘ing’ in English). This allows searches to find variant forms of the same word without tediously entering all the possible variants. The number represents the occurance of the word in the original string. By default, Postgres uses ‘english’ as text search configuration for the function to_tsvector and it will also ignore english stopwords. That explains why the tsvector results have fewer elements than the ones in our sentence. We see later a bit more about languages and text search configuration. Now in order to query a tsvector document, lets try following sql: select to_tsvector('If you can dream it, you can do it') @@ 'dream'; ?column? ---------- t (1 row) > select to_tsvector('It''s kind of fun to do the impossible') @@ 'impossible'; ?column? ---------- f The second result is false because we need to build this using lexemes and so we need two things to_tsquery() function and operator @@. The following query shows the difference. SELECT 'impossible'::tsquery, to_tsquery('impossible'); tsquery | to_tsquery --------------+------------ 'impossible' | 'imposs' (1 row) SELECT 'dream'::tsquery, to_tsquery('dream'); tsquery | to_tsquery --------------+------------ 'dream' | 'dream' (1 row) In the above case of ‘dream’ the stem is also dream but ‘impossible’ stem is ‘imposs’ and thats why our to_tsvector query returned false. Now if we run the above query using ts_query we get SELECT to_tsvector('It''s kind of fun to do the impossible') @@ to_tsquery('impossible'); ?column? ---------- t (1 row) ts_query function can take all the boolean operators & (AND), | (OR), and ! (NOT) Lets come back to the main problem and construct the final query, which should look like the following. SELECT profile_name, ad_name, ad_id, vendor FROM (SELECT profiles.name as profile_name, ads.data->>'name' as ad_name, ads.data->>'ad_id' as ad_id, ads.data->>'type' as vendor, to_tsvector(profiles.name) || to_tsvector(cast(ads.data->>'name' as text)) || to_tsvector(cast(ads.data->>'ad_id' as text)) || to_tsvector(cast(ads.data->>'type' as text)) as document FROM ads JOIN accounts on accounts.account_id = ads.account_id JOIN profiles on profiles.id = accounts.profile_id) as ad_search WHERE ad_search.document @@ to_tsquery('United'); profile_name | ad_name | ad_id | vendor ------------------------------+-----------------------------+-------+--------- United Federation of Planets | Plane on rent for wedding | 34568 | youtube United Federation of Planets | Plane Accessories on sale | 18976 | google United Federation of Planets | Plane Taxi Service for free | 76859 | twitter (3 rows) This returns our results with united lexemes. Now lets do some optimizations.Since the document is spread across multiple tables, its necessary to denormalize the data or create materialized view. As per Postgres: “Materialized views in PostgreSQL use the rule system like views do, but persist the results in a table-like form”. The main differences between: CREATE MATERIALIZED VIEW mymatview AS SELECT * FROM mytab; and: CREATE TABLE mymatview AS SELECT * FROM myth; is that the materialized view cannot subsequently be directly updated and that the query used to create the materialized view is stored in exactly the same way that a view’s query is stored, so that fresh data can be generated for the materialized view with: REFRESH MATERIALIZED VIEW mymatview; So lets create one for our search. CREATE MATERIALIZED VIEW ad_search AS SELECT profiles.name as profile_name, ads.data->>'name' as ad_name, ads.data->>'ad_id' as ad_id, ads.data->>'type' as vendor, to_tsvector(profiles.name) || to_tsvector(cast(ads.data->>'name' as text)) || to_tsvector(cast(ads.data->>'ad_id' as text)) || to_tsvector(cast(ads.data->>'type' as text)) as document FROM ads JOIN accounts on accounts.account_id = ads.account_id JOIN profiles on profiles.id = accounts.profile_id; Then reindexing the search engine will be as simple as periodically running REFRESH MATERIALIZED VIEW search_index;. We can now add an index on the materialized view. CREATE INDEX idx_ad_search ON ad_search USING gin(document); Now our query also becomes much simpler. SELECT profile_name, ad_name, ad_id, vendor FROM ad_search WHERE document @@ to_tsquery('United'); There are so many other things that we can do with postgres, like: Ranking – providing weight to results and then ordering on the basis of that using ts_rank() function Similarities search – covers misspelling and fuzzy search behaviours using similarity() function Support for multiple languages Support for accented characters Conclusion This article aims to give you a brief insight into building your own search with postgres and we have seen how easy is to build a document based search using it . Postgres might not be as advanced as ElasticSearch and SOLR, but these two are dedicated full-text search tools whereas full-text search is only a feature of PostgreSQL and a pretty good one. |
| json metadata | {"tags":["firstpost","postgres","tech","search","fulltextsearch"],"app":"steemit/0.1","format":"markdown"} |
| parent author | |
| parent permlink | firstpost |
| permlink | building-full-text-search-for-your-application-using-postgres |
| title | Building Full Text Search For Your Application using Postgres |
| Transaction Info | Block #19665983/Trx d4ba47b884a0833fcad657a4522693bed81e1fa1 |
View Raw JSON Data
{
"block": 19665983,
"op": [
"comment",
{
"author": "snya",
"body": "Now a days when you have data, search becomes an essential part of your tool. Doesn’t matter if you have website or not, search is an important feature, which comes to mind before even starting to build the tool itself.\n\nThe most popular platform in last 5 years for search that we have seen are ElasticSearch and SOLR, both are Lucene based. They are very powerful and great tools, solves almost all the tasks of search, but before going down to the route of adding these massive tools in the existing toolset, lets look at something which is bit lighter and should be good enough!\n\nWhen we build a basic search feature in our app, we would at least want:\n\n JSON attributes support\n Indexing\n Stemming\n\nSince the postgres > 8.3 , postgres supports full text search with all of the above feature and much more.\n\nlets see how easy it is to setup a basic search feature for your app.\n\nLets assume following schema and data:\n\n\n\nCREATE TABLE profiles (\n\nid SERIAL PRIMARY KEY,\n\nname TEXT\n\n);\n\nCREATE TABLE accounts (\n\nid SERIAL PRIMARY KEY,\n\naccount_id INTEGER NOT NULL,\n\nprofile_id INTEGER NOT NULL\n\n);\n\n\nCREATE TABLE ads (\n\naccount_id INTEGER NOT NULL,\n\nid SERIAL PRIMARY KEY,\n\ndata jsonb\n\n);\n\nINSERT INTO profiles (id, name)\n\nVALUES (1, 'United Federation of Planets'),\n\n(2, 'Wayne Industries');\n\nINSERT INTO accounts (id, account_id, profile_id)\n\nVALUES (1, 999, 1), (2, 998, 1), (3, 666, 2);\n\nINSERT INTO ads (id, account_id, data)\n\nVALUES (1, 999, '{\"name\": \"Plane Accessories on sale\", \"ad_id\": 18976, \"type\": \"google\"}'),\n\n(2, 999, '{\"name\": \"Plane Taxi Service for free\", \"ad_id\": 76859, \"type\": \"twitter\"}'),\n\n(3, 998, '{\"name\": \"Plane on rent for wedding\", \"ad_id\": 34568, \"type\": \"youtube\"}'),\n\n(4, 666, '{\"name\": \"blow up plane training\", \"ad_id\": 98576, \"type\": \"Facebook\"}');\n\nThe setup is for the any advertising platform, a profile, which has many accounts and each accounts has many ads.\n\nWhen we talk about full text search, we usually talk about a document, simply put a document is like an article or content which is the subject area of search and may be a logical entity. It may be across multiple tables.\n\n“In text retrieval, full text search refers to techniques for searching a single computer-stored document or a collection in a full text database.“\n\nDocument is not related to table schema but to data, for our use case the we could use any/all of the following as a document:\n\n profiles.name\n ads.data.name\n ads.data.ad_id\n ads.data.type\n\nSo lets create them.\n\n\nSELECT profiles.name || ' ' || cast(ads.data->>'name' as text) || ' ' || cast(ads.data->>'ad_id' as text) || ' ' || cast(ads.data->>'type' as text) as document\n\nFROM ads\n\nJOIN accounts on accounts.account_id = ads.account_id\n\nJOIN profiles on profiles.id = accounts.profile_id;\n\ndocument\n\n------------------------------------------------------------------\n\nWayne Industries plane training 98576 Facebook\n\nUnited Federation of Planets Plane on rent for wedding 34568 youtube\n\nUnited Federation of Planets Plane Accessories on sale 18976 google\n\nUnited Federation of Planets Plane Taxi Service for free 76859 twitter\n\n(4 rows)\n\nYou can also use string_agg() function with coalesce() function in order to aggregate many strings and remove nulls.\n\nNow our document is just a simple long string, and doesn’t really optimised to be searched, we need to format this in lexemes, which is more suited and understood by postgres for full text search.\n\n“A lexeme is a sequence of characters in the source program that matches the pattern for a token and is identified by the lexical analyzer as an instance of that token”\n\nTo convert the above document to lexemes postgres provides us with to_tsvector().\n\n\n\nSELECT to_tsvector(profiles.name) ||\n\nto_tsvector(cast(ads.data->>'name' as text)) ||\n\nto_tsvector(cast(ads.data->>'ad_id' as text)) ||\n\nto_tsvector(cast(ads.data->>'type' as text))\n\nas document\n\nFROM ads\n\nJOIN accounts on accounts.account_id = ads.account_id\n\nJOIN profiles on profiles.id = accounts.profile_id;\n\ndocument\n\n------------------------------------------------------------------\n\n'98576':7 'blow':3 'facebook':8 'industries':2 'plane':5 'training':6 'up':4 'wayne':1\n\n'34568':10 'federation':2 'for':8 'of':3 'on':6 'plane':5 'planets':4 'rent':7 'united':1 'wedding':9 'youtube':11\n\n'18976':9 'accessories':6 'federation':2 'google':10 'of':3 'on':7 'plane':5 'planets':4 'sale':8 'united':1\n\n'76859':10 'federation':2 'for':8 'free':9 'of':3 'plane':5 'planets':4 'service':7 'taxi':6 'twitter':11 'united':1\n\n(4 rows)\n\n\nNow the result is slightly different.\n\nA tsvector value is a sorted list of distinct lexemes which are words that have been normalized to make different variants of the same word look alike. For example, normalization almost always includes folding upper-case letters to lower-case and often involves removal of suffixes (such as ‘s’, ‘es’ or ‘ing’ in English). This allows searches to find variant forms of the same word without tediously entering all the possible variants. The number represents the occurance of the word in the original string.\n\nBy default, Postgres uses ‘english’ as text search configuration for the function to_tsvector and it will also ignore english stopwords. That explains why the tsvector results have fewer elements than the ones in our sentence. We see later a bit more about languages and text search configuration.\n\nNow in order to query a tsvector document, lets try following sql:\n\n\n\nselect to_tsvector('If you can dream it, you can do it') @@ 'dream';\n\n?column?\n\n----------\n\nt\n\n(1 row)\n\n> select to_tsvector('It''s kind of fun to do the impossible') @@ 'impossible';\n\n?column?\n\n----------\n\nf\n\n\nThe second result is false because we need to build this using lexemes and so we need two things to_tsquery() function and operator @@.\n\nThe following query shows the difference.\n\n\n\nSELECT 'impossible'::tsquery, to_tsquery('impossible');\n\ntsquery | to_tsquery\n\n--------------+------------\n\n'impossible' | 'imposs'\n\n(1 row)\n\nSELECT 'dream'::tsquery, to_tsquery('dream');\n\ntsquery | to_tsquery\n\n--------------+------------\n\n'dream' | 'dream'\n\n(1 row)\n\nIn the above case of ‘dream’ the stem is also dream but ‘impossible’ stem is ‘imposs’ and thats why our to_tsvector query returned false.\n\nNow if we run the above query using ts_query we get\n\n\n\nSELECT to_tsvector('It''s kind of fun to do the impossible') @@ to_tsquery('impossible');\n\n?column?\n\n----------\n\nt\n\n(1 row)\n\n\nts_query function can take all the boolean operators & (AND), | (OR), and ! (NOT)\n\nLets come back to the main problem and construct the final query, which should look like the following.\n\n\n\nSELECT profile_name, ad_name, ad_id, vendor\n\nFROM (SELECT profiles.name as profile_name,\n\nads.data->>'name' as ad_name,\n\nads.data->>'ad_id' as ad_id,\n\nads.data->>'type' as vendor,\n\nto_tsvector(profiles.name) ||\n\nto_tsvector(cast(ads.data->>'name' as text)) ||\n\nto_tsvector(cast(ads.data->>'ad_id' as text)) ||\n\nto_tsvector(cast(ads.data->>'type' as text))\n\nas document\n\nFROM ads\n\nJOIN accounts on accounts.account_id = ads.account_id\n\nJOIN profiles on profiles.id = accounts.profile_id) as ad_search\n\nWHERE ad_search.document @@ to_tsquery('United');\n\nprofile_name | ad_name | ad_id | vendor\n\n------------------------------+-----------------------------+-------+---------\n\nUnited Federation of Planets | Plane on rent for wedding | 34568 | youtube\n\nUnited Federation of Planets | Plane Accessories on sale | 18976 | google\n\nUnited Federation of Planets | Plane Taxi Service for free | 76859 | twitter\n\n(3 rows)\n\n\nThis returns our results with united lexemes.\n\nNow lets do some optimizations.Since the document is spread across multiple tables, its necessary to denormalize the data or create materialized view.\nAs per Postgres: “Materialized views in PostgreSQL use the rule system like views do, but persist the results in a table-like form”.\n\nThe main differences between:\n\n\nCREATE MATERIALIZED VIEW mymatview AS SELECT * FROM mytab;\n\nand:\n\nCREATE TABLE mymatview AS SELECT * FROM myth;\n\nis that the materialized view cannot subsequently be directly updated and that the query used to create the materialized view is stored in exactly the same way that a view’s query is stored, so that fresh data can be generated for the materialized view with:\n\n\n\nREFRESH MATERIALIZED VIEW mymatview;\n\nSo lets create one for our search.\n\n\n\nCREATE MATERIALIZED VIEW ad_search\n\nAS SELECT profiles.name as profile_name,\n\nads.data->>'name' as ad_name,\n\nads.data->>'ad_id' as ad_id,\n\nads.data->>'type' as vendor,\n\nto_tsvector(profiles.name) ||\n\nto_tsvector(cast(ads.data->>'name' as text)) ||\n\nto_tsvector(cast(ads.data->>'ad_id' as text)) ||\n\nto_tsvector(cast(ads.data->>'type' as text))\n\nas document\n\nFROM ads\n\nJOIN accounts on accounts.account_id = ads.account_id\n\nJOIN profiles on profiles.id = accounts.profile_id;\n\nThen reindexing the search engine will be as simple as periodically running REFRESH MATERIALIZED VIEW search_index;.\n\nWe can now add an index on the materialized view.\n\n\n\nCREATE INDEX idx_ad_search ON ad_search USING gin(document);\n\nNow our query also becomes much simpler.\n\n\n\nSELECT profile_name, ad_name, ad_id, vendor\n\nFROM ad_search\n\nWHERE document @@ to_tsquery('United');\n\n\nThere are so many other things that we can do with postgres, like:\n\n Ranking – providing weight to results and then ordering on the basis of that using ts_rank() function\n Similarities search – covers misspelling and fuzzy search behaviours using similarity() function\n Support for multiple languages\n Support for accented characters\n\n \n\nConclusion\n\nThis article aims to give you a brief insight into building your own search with postgres and we have seen how easy is to build a document based search using it . Postgres might not be as advanced as ElasticSearch and SOLR, but these two are dedicated full-text search tools whereas full-text search is only a feature of PostgreSQL and a pretty good one.",
"json_metadata": "{\"tags\":[\"firstpost\",\"postgres\",\"tech\",\"search\",\"fulltextsearch\"],\"app\":\"steemit/0.1\",\"format\":\"markdown\"}",
"parent_author": "",
"parent_permlink": "firstpost",
"permlink": "building-full-text-search-for-your-application-using-postgres",
"title": "Building Full Text Search For Your Application using Postgres"
}
],
"op_in_trx": 0,
"timestamp": "2018-02-07T16:34:06",
"trx_id": "d4ba47b884a0833fcad657a4522693bed81e1fa1",
"trx_in_block": 3,
"virtual_op": 0
}2018/02/07 16:28:42
2018/02/07 16:28:42
| active | {"account_auths":[],"key_auths":[["STM6hVF4FQz3MbdD5iXV1tUzSQigdrDaBjLwZPsnLDvubbQoAENp7",1]],"weight_threshold":1} |
| creator | steem |
| delegation | 29700.000000 VESTS |
| extensions | [] |
| fee | 0.500 STEEM |
| json metadata | |
| memo key | STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi |
| new account name | snya |
| owner | {"account_auths":[],"key_auths":[["STM8e9NUafenom5mT6zsoyrSDsCN86DHJF5pK6ej1zpR65zrZbqSk",1]],"weight_threshold":1} |
| posting | {"account_auths":[],"key_auths":[["STM5ic4rtacpT7dGhXpiy5dkvLdvb4vSF9kNkWFtxRSAgnqH7zCvL",1]],"weight_threshold":1} |
| Transaction Info | Block #19665875/Trx ccd6a125909357dd498ad535a7001640a214fcfa |
View Raw JSON Data
{
"block": 19665875,
"op": [
"account_create_with_delegation",
{
"active": {
"account_auths": [],
"key_auths": [
[
"STM6hVF4FQz3MbdD5iXV1tUzSQigdrDaBjLwZPsnLDvubbQoAENp7",
1
]
],
"weight_threshold": 1
},
"creator": "steem",
"delegation": "29700.000000 VESTS",
"extensions": [],
"fee": "0.500 STEEM",
"json_metadata": "",
"memo_key": "STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi",
"new_account_name": "snya",
"owner": {
"account_auths": [],
"key_auths": [
[
"STM8e9NUafenom5mT6zsoyrSDsCN86DHJF5pK6ej1zpR65zrZbqSk",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM5ic4rtacpT7dGhXpiy5dkvLdvb4vSF9kNkWFtxRSAgnqH7zCvL",
1
]
],
"weight_threshold": 1
}
}
],
"op_in_trx": 0,
"timestamp": "2018-02-07T16:28:42",
"trx_id": "ccd6a125909357dd498ad535a7001640a214fcfa",
"trx_in_block": 30,
"virtual_op": 0
}Manabar
Voting Power100.00%
Downvote Power100.00%
Resource Credits100.00%
Reputation Progress0.00%
{
"voting_manabar": {
"current_mana": "8143659806",
"last_update_time": 1779086478
},
"downvote_manabar": {
"current_mana": 2035914951,
"last_update_time": 1779086478
},
"rc_account": {
"account": "snya",
"max_rc": "10164408779",
"max_rc_creation_adjustment": {
"amount": "2020748973",
"nai": "@@000000037",
"precision": 6
},
"rc_manabar": {
"current_mana": "10164408779",
"last_update_time": 1779086478
}
}
}Account Metadata
| POSTING JSON METADATA | |
| profile | {"profile_image":"https://snyaggarwal.github.io/assets/images/profile2.png","name":"Sny","location":"Delhi, India","website":"https://snyaggarwal.github.io"} |
| JSON METADATA | |
| profile | {"profile_image":"https://snyaggarwal.github.io/assets/images/profile2.png","name":"Sny","location":"Delhi, India","website":"https://snyaggarwal.github.io"} |
{
"posting_json_metadata": {
"profile": {
"profile_image": "https://snyaggarwal.github.io/assets/images/profile2.png",
"name": "Sny",
"location": "Delhi, India",
"website": "https://snyaggarwal.github.io"
}
},
"json_metadata": {
"profile": {
"profile_image": "https://snyaggarwal.github.io/assets/images/profile2.png",
"name": "Sny",
"location": "Delhi, India",
"website": "https://snyaggarwal.github.io"
}
}
}Auth Keys
Owner
Single Signature
Public Keys
STM8e9NUafenom5mT6zsoyrSDsCN86DHJF5pK6ej1zpR65zrZbqSk1/1
Active
Single Signature
Public Keys
STM6hVF4FQz3MbdD5iXV1tUzSQigdrDaBjLwZPsnLDvubbQoAENp71/1
Posting
Single Signature
Public Keys
STM5ic4rtacpT7dGhXpiy5dkvLdvb4vSF9kNkWFtxRSAgnqH7zCvL1/1
Memo
STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi
{
"owner": {
"account_auths": [],
"key_auths": [
[
"STM8e9NUafenom5mT6zsoyrSDsCN86DHJF5pK6ej1zpR65zrZbqSk",
1
]
],
"weight_threshold": 1
},
"active": {
"account_auths": [],
"key_auths": [
[
"STM6hVF4FQz3MbdD5iXV1tUzSQigdrDaBjLwZPsnLDvubbQoAENp7",
1
]
],
"weight_threshold": 1
},
"posting": {
"account_auths": [],
"key_auths": [
[
"STM5ic4rtacpT7dGhXpiy5dkvLdvb4vSF9kNkWFtxRSAgnqH7zCvL",
1
]
],
"weight_threshold": 1
},
"memo": "STM6YejsSfA8G7LJK5wxaHUznJmZkS12htvV3LABodCLLY1FXTqDi"
}Witness Votes
0 / 30
No active witness votes.
[]