{"id":1431,"date":"2019-08-25T22:36:28","date_gmt":"2019-08-25T13:36:28","guid":{"rendered":"https:\/\/oboki.net\/workspace\/?p=1431"},"modified":"2019-10-05T22:38:13","modified_gmt":"2019-10-05T13:38:13","slug":"elasticsearch-%ea%b2%80%ec%83%89%ec%97%94%ec%a7%84-%eb%a7%8c%eb%93%a4%ea%b8%b0-4-flask-%ec%9b%b9%ec%84%9c%eb%b9%84%ec%8a%a4","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/data-engineering\/elasticsearch\/elasticsearch-%ea%b2%80%ec%83%89%ec%97%94%ec%a7%84-%eb%a7%8c%eb%93%a4%ea%b8%b0-4-flask-%ec%9b%b9%ec%84%9c%eb%b9%84%ec%8a%a4\/","title":{"rendered":"[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 4 \u2013 Flask \uc6f9\uc11c\ube44\uc2a4"},"content":{"rendered":"<h1>[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 4 \u2013 Flask \uc6f9\uc11c\ube44\uc2a4<\/h1>\n<p>elasticsearch\uc5d0 \ud544\uc694\ud55c \ub370\uc774\ud130\ub294 \ub2e4 \uc0c9\uc778\ud574\ub480\uae30 \ub54c\ubb38\uc5d0 \uac80\uc0c9\uc5d4\uc9c4 \uc790\uccb4\ub294 \ub2e4 \ub9cc\ub4e4\uc5b4\uc84c\uace0 \uc11c\ube44\uc2a4\ub97c \uc704\ud574\uc11c \uc801\ub2f9\ud55c UI \ub9cc \uc788\uc73c\uba74 \ub420 \uac83 \uac19\ub2e4. \uae30\uc874 \uc6b4\uc601\ud558\ub294 \uc6f9\ud398\uc774\uc9c0\uc5d0 \uc774\uc2dd\ud558\uace0\uc790 \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc791\uac8c \ubaa8\ub4c8\ud615\ud0dc\ub85c \ub9cc\ub4e4\uc5b4\uc11c \uac04\ub2e8\ud55c \uc2a4\ud06c\ub9bd\ud2b8\ub85c \ud574\ub2f9 \uac80\uc0c9 \uc5d4\uc9c4\uc744 \ubd88\ub7ec\uc624\uac8c\ud560 \uc218\ub3c4 \uc788\uc744 \uac83 \uac19\uc740\ub370 \uc774\uac83\ub9cc\uc73c\ub85c \uc644\uc804\ud55c \ub3c5\ub9bd \uc11c\ube44\uc2a4\ub97c \uad6c\ucd95\ud558\ub294 \uac83\uc774\uc5b4\uc11c \ud06c\uac8c \ub2e8\uacc4\ub97c \ub098\ub204\uc5b4\uc11c \ub9cc\ub4e4\uc9c0\ub294 \uc54a\uc558\ub2e4.<\/p>\n<p>flask \ub9cc\uc73c\ub85c \uc6f9\ud398\uc774\uc9c0\ub97c \ub9cc\ub4e4\uae30 \uc704\ud574\uc11c \uc544\ub798\uc640 \uac19\uc740 \uad6c\uc131\uc694\uc18c\ub4e4\uc744 \uc774\uc6a9\ud55c\ub2e4. \uc55e\uc11c \ub9cc\ub4e4\uc5b4\ub193\uc740 <code>search.py<\/code> \uc678\uc5d0 <code>app.py<\/code>, <code>hlight.py<\/code>, <code>templates\/<\/code>, <code>static\/<\/code> \uc774 \ucd94\uac00\ub418\ub294\ub370<\/p>\n<pre><code class=\"language-txt\">\u251c\u2500\u2500 app.py\n\u251c\u2500\u2500 body.json\n\u251c\u2500\u2500 hlight.py\n\u251c\u2500\u2500 search.py\n\u251c\u2500\u2500 static\n\u2502\u00a0\u00a0 \u251c\u2500\u2500 css\n\u2502\u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 style.css\n\u2514\u2500\u2500 templates\n    \u251c\u2500\u2500 index.html\n    \u2514\u2500\u2500 result.html<\/code><\/pre>\n<p><code>hlight.py<\/code>\ub294 \ub2e8\uc21c\ud788 \uac80\uc0c9 \uacb0\uacfc\uc5d0 \uac15\uc870 \ud6a8\uacfc\ub97c \ub354\ud574\uc8fc\ub294 \uac04\ub2e8\ud55c \ud568\uc218\uc77c \ubfd0\uc774\uace0, <code>app.py<\/code>\uac00 \uc774 \ud504\ub85c\uc81d\ud2b8\uc758 \uba54\uc778\uc73c\ub85c \uc6f9\uc11c\ubc84 \uc5ed\ud560\uacfc \uc6f9\ud398\uc774\uc9c0 \ub80c\ub354\ub9c1 \ub4f1\uc744 \ub2f4\ub2f9\ud55c\ub2e4. <code>templates\/<\/code>, <code>static\/<\/code> \ub514\ub809\ud1a0\ub9ac\ub294 flask \uc5d0\uc11c \uc6f9 \ub9ac\uc18c\uc2a4\ub97c \ub85c\ub4dc\ud558\ub294\ub370\uc5d0 \uc0ac\uc6a9\ub418\ub294 \uacbd\ub85c\uc778\ub370 \ubb34\uc870\uac74 <code>templates\/<\/code>, <code>static\/<\/code> \uc73c\ub85c \uc774\ub984\uc9c0\uc5b4\uc57c \ud55c\ub2e4.<\/p>\n<h2>app.py<\/h2>\n<p><code>index()<\/code> \uc5d0\uc11c \uae30\ubcf8\uc801\uc778 \uac80\uc0c9 \ud654\uba74\uacfc \uac80\uc0c9 \uacb0\uacfc\ub97c \ubaa8\ub450 \uc11c\ube44\uc2a4\ud558\uace0 <code>issueView()<\/code>\uc5d0\uc11c\ub294 \uc0ac\uc6a9\uc790\uac00 \uc120\ud0dd\ud55c \ud654\uba74\uc73c\ub85c redirect\ub9cc \uc218\ud589\ud55c\ub2e4. \uad73\uc774 <code>issueView()<\/code> \ud568\uc218\ub97c \ucd94\uac00\ud55c \uc774\uc720\ub294 \uac80\uc0c9 \uacb0\uacfc\uc5d0\uc11c \ub2e8\uc21c\ud788 \ub9c1\ud06c\ub85c \ud574\ub2f9 \uc774\uc288\ub85c \ub118\uc5b4\uac00\ub3c4\ub85d \ud588\uc744 \ub54c\uc5d0\ub294 \ubcc4\ub3c4 \ub85c\uae45\uc744 \ud558\uc9c0 \uc54a\ub294 \ud55c \uc6f9\uc11c\ubc84 accesslog \uc5d0\uc11c \ud2b8\ub798\ud0b9\uc744 \ud560 \uc218 \uc5c6\uc5b4 \uc0ac\uc6a9\uc790 \ud589\ub3d9 \ucd94\uc801\uc744 \uc704\ud574 \ucd94\uac00\ud588\ub2e4.<\/p>\n<p>request method (<code>GET<\/code>,<code>POST<\/code>) \uc5d0 \ub530\ub77c\uc11c \ub2e4\ub978 \uacb0\uacfc\ub97c \ub9ac\ud134\ud558\uac8c \ub418\ub294\ub370 \uc774\ub97c \uc774\uc6a9\ud574\uc11c \uac80\uc0c9\uc5b4\ub97c \uc785\ub825\ubc1b\uc558\uc744 \ub54c\uc640 \ucc98\uc74c \uc6f9\ud398\uc774\uc9c0\uc5d0 \uc811\uadfc\ud588\uc744 \ub54c \uadf8\ub9ac\uace0 \uac80\uc0c9\uacb0\uacfc\ub97c \ubfcc\ub824\uc904 \ub54c\ub97c \uad6c\ubd84\ud560 \uc218 \uc788\ub2e4.<\/p>\n<pre><code class=\"language-python\">#!\/bin\/python3.6\n\nimport os\nfrom flask import Flask, flash, render_template, request, redirect, session, make_response\nimport search\nimport hlight\n\nApp = Flask(__name__)\nApp.config[&quot;DEBUG&quot;] = True\nApp.secret_key = &#039;dong1lkim, University of Seoul&#039;\n\n@App.route(&#039;\/&#039;, methods=[&#039;GET&#039;,&#039;POST&#039;,])\ndef index():\n    if request.method == &#039;POST&#039;:\n        rctgr = request.form.getlist(&#039;ctgr&#039;)\n        ctgr = rctgr.pop(0)\n        for c in rctgr: ctgr += &#039;,&#039; + c\n        sort = request.form[&#039;sort&#039;] if &#039;sort&#039; in request.form else &#039;&#039;\n        product = request.form[&#039;product&#039;]\n        return redirect(&#039;?s=&#039;+request.form[&#039;s&#039;]+&#039;&amp;product=&#039;+product+&#039;&amp;sort=&#039;+sort+&#039;&amp;ctgr=&#039;+ctgr)\n\n    s = request.args[&#039;s&#039;] if &#039;s&#039; in request.args else None\n    p = int(request.args[&#039;p&#039;]) if &#039;p&#039; in request.args else 1\n    sort = request.args[&#039;sort&#039;] if &#039;sort&#039; in request.args else None\n    ctgr = request.args[&#039;ctgr&#039;].split(&#039;,&#039;) if &#039;ctgr&#039; in request.args else None\n    product = request.args[&#039;product&#039;] if &#039;product&#039; in request.args else None\n\n    if s == None: return render_template(&#039;index.html&#039;)\n\n    rctgr,temp = list(ctgr),list(ctgr)\n    ctgr = temp.pop(0)\n    for c in temp: ctgr += &#039;,&#039; + c\n\n    result,total = search.issue(s,page=p,product=product,sort=sort,ctgr=rctgr)\n\n    pagination = {&#039;current&#039;:p,&quot;total&quot;:total\/\/10,&quot;max&quot;:total}\n    opts = {&#039;sort&#039;:sort,&#039;product&#039;:product,&#039;ctgr&#039;:ctgr,&#039;rctgr&#039;:rctgr}\n\n    if total == 0: result,total = search.issue(s,page=p,product=product,sort=sort,ctgr=rctgr,op=&#039;or&#039;)\n\n    for i in result: i[&#039;_source&#039;].update({&#039;Issue Details&#039;:hlight.hlight_term(i[&#039;_source&#039;][&#039;Issue Details&#039;],s.split())})\n\n    return make_response(\n        render_template(&#039;result.html&#039;,s=s,pagination=pagination,result=result,opts=opts,hist=[])\n    )\n\n@App.route(&#039;\/issueView&#039;, methods=[&#039;GET&#039;])\ndef issueView():\n    issueId = request.args[&#039;issueId&#039;]\n    return redirect(&#039;https:\/\/ims.tmaxsoft.com\/tody\/ims\/issue\/issueView.do?issueId=&#039;+issueId)\n\nif __name__ == &#039;__main__&#039;: App.run(host=&#039;0.0.0.0&#039;,port=&#039;8888&#039;)<\/code><\/pre>\n<p>request args \ub97c \uc774\uc6a9\ud574\uc11c \uc6f9 \ud398\uc774\uc9c0 form \uc5d0 \uc785\ub825\ub41c \uac12\ub4e4\uc744 \uc11c\ubc84\uc640 \ud1b5\uc2e0\ud558\ub3c4\ub85d \uc124\uacc4\ud588\uae30\ub54c\ubb38\uc5d0 \uc774 request \ubaa8\ub378\uc774 \ubc14\ub014 \ub54c\ub9c8\ub2e4 \uc6f9\ud398\uc774\uc9c0 \ud15c\ud50c\ub9bf\uc744 \ub9de\ucdb0\uc918\uc57c\ud558\ub294 \ubc88\uac70\ub85c\uc6c0\uc774 \uc788\uc5c8\ub2e4. \ub9c8\ucc2c\uac00\uc9c0\ub85c \ud15c\ud50c\ub9bf\uc744 \ubcc0\uacbd\ud558\ub354\ub77c\ub3c4 \uc6f9\uc11c\ubc84\uac00 \uc81c\ub300\ub85c \uc751\ub2f5\ud574\uc904 \uc218 \uc788\ub294\uc9c0 \ud655\uc778\ud558\ub294 \uc791\uc5c5\uc774 \ud544\uc694\ud558\ub2e4.<\/p>\n<p><code>flask.session<\/code> \uc744 \ud65c\uc6a9\ud558\uba74 \ub85c\uadf8\uc778 \uae30\ub2a5\uc774\ub77c\ub358\uc9c0 \ucfe0\ud0a4 \uae30\ub2a5 \ub4f1\uc744 \ud65c\uc6a9\ud560 \uc218 \uc788\ub2e4.<\/p>\n<h2>hlight.py<\/h2>\n<p>\uc774 \ud568\uc218\ub294 \uc704 <code>app.py<\/code> \uc5d0\uc11c \uac80\uc0c9 \uacb0\uacfc\ub97c \ub9ac\ud134\ud560 \ub54c\uc5d0 \ud638\ucd9c\ub418\ub294\ub370, \ub2e8\uc21c\ud788 \uac80\uc0c9 \uacb0\uacfc\uc5d0 \uac80\uc0c9\uc5b4\uac00 \ud3ec\ud568\ub418\ub294 \uc704\uce58\ub97c \ucc3e\uc544 \ud574\ub2f9 \uac80\uc0c9\uc5b4 \ubd80\uadfc\uc758 500\uc790\ub9cc \ub9ac\ud134\ud55c\ub2e4.<\/p>\n<pre><code class=\"language-python\">import re\n\ndef hlight_term(string,term):\n    if len(term) &lt; 2:\n        idx = string.find(term[0])\n        begin = max(18,idx-10)\n        pattern = &quot;r&#039;(&quot;+term[0]+&quot;)&#039;&quot;\n        result = string[begin:begin+500]\n        return result\n    else:\n        begin = 400\n        for i in range(len(term)):\n            begin = min(begin,string.find(term[i]))\n        begin = max(18,begin)\n        result = string[begin:begin+500]\n        return result<\/code><\/pre>\n<h2>index.html<\/h2>\n<p>\uc704 <code>app.py<\/code> \uc5d0\uc11c request agrs \uac00 \uc544\ubb34\uac83\ub3c4 \uc5c6\uc744 \ub54c \ub80c\ub354\ub9c1 \ud558\uac8c \ub418\ub294 \ud15c\ud50c\ub9bf\uc774\ub2e4.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ko-KR&quot;&gt;\n    &lt;head&gt;  \n        &lt;meta charset=&quot;UTF-8&quot;&gt;\n        &lt;title&gt;Search for IMS &#8211; tbig&lt;\/title&gt;\n        &lt;script type=&quot;text\/javascript&quot;&gt;\n            var bDisplay = true;\n            function doDisplay(){\n                var con = document.getElementById(&quot;sOpts&quot;);\n                if(con.style.display == &#039;none&#039;){\n                    con.style.display = &#039;block&#039;;\n                }\n                else{\n                    con.style.display = &#039;none&#039;;\n                }\n            }\n        &lt;\/script&gt;\n        &lt;style&gt;\n            #sOptsOrder li,ul {\n                list-style:none;\n                margin: 0 0 0 0;\n                padding: 0 0 0 0;\n            }\n            #sOpts select[multiple]{\n                height:120px;\n            }\n            #sOpts select[multiple]::-webkit-scrollbar{\n                display:none;\n            }\n        &lt;\/style&gt;\n    &lt;\/head&gt;\n\n    &lt;body&gt;\n        &lt;main&gt;\n            &lt;header&gt;\n                &lt;div&gt;\n                    &lt;a href=&quot;\/&quot;&gt;&lt;h1&gt;Search for IMS&lt;\/h1&gt;&lt;\/a&gt;\n                &lt;\/div&gt;\n            &lt;\/header&gt;\n\n            &lt;section&gt;\n                &lt;div&gt;\n                        &lt;h2&gt;Search&lt;\/h2&gt;&lt;hr&gt;\n                        &lt;form method=&quot;POST&quot;&gt;\n                            &lt;p&gt;\n                                &lt;label&gt;Keyword&lt;\/label&gt;\n                                &lt;input type=&quot;text&quot; name=&quot;s&quot; value=&quot;&quot; placeholder=&quot;Type your search term here&quot; maxlength=&quot;90%&quot;&gt;\n                            &lt;\/p&gt;\n                            &lt;div id=&quot;sOptsOrder&quot;&gt;\n                                &lt;li&gt;\n                                    &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;accuracy&quot; checked&gt;&lt;label&gt;order by score&lt;\/label&gt;&lt;\/ul&gt;\n                                    &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;latest&quot;&gt;&lt;label&gt;order by registered date&lt;\/label&gt;&lt;\/ul&gt;\n                                &lt;\/li&gt;&lt;br&gt;\n                            &lt;\/div&gt;\n                            &lt;div id=&quot;sOpts&quot; style=&quot;display:none; -ms-overflow-style:none;&quot;&gt;\n                                &lt;label&gt;Product&lt;\/label&gt;\n                                &lt;select name=&quot;product&quot;&gt;\n                                    &lt;option value=&quot;All&quot;&gt;All&lt;\/option&gt;\n                                    &lt;option value=&quot;API Gateway&quot; &gt;API Gateway&lt;\/option&gt;\n                                    &lt;option value=&quot;AnyLink Over Tmax&quot; &gt;AnyLink Over Tmax&lt;\/option&gt;\n                                    &lt;option value=&quot;AnyMiner&quot; &gt;AnyMiner&lt;\/option&gt;\n                                    &lt;option value=&quot;BizMaster&quot; &gt;BizMaster&lt;\/option&gt;\n                                    &lt;option value=&quot;Bridge&quot; &gt;Bridge&lt;\/option&gt;\n                                    &lt;option value=&quot;CDS&quot; &gt;CDS&lt;\/option&gt;\n                                    &lt;option value=&quot;HyperData&quot; &gt;HyperData&lt;\/option&gt;\n                                    &lt;option value=&quot;HyperLoader&quot; &gt;HyperLoader&lt;\/option&gt;\n                                    &lt;option value=&quot;InfiniCache&quot; &gt;InfiniCache&lt;\/option&gt;\n                                    &lt;option value=&quot;InfiniLink&quot; &gt;InfiniLink&lt;\/option&gt;\n                                    &lt;option value=&quot;JEUS&quot; &gt;JEUS&lt;\/option&gt;\n                                    &lt;option value=&quot;OpenFrame&quot; &gt;OpenFrame&lt;\/option&gt;\n                                    &lt;option value=&quot;ProBus&quot; &gt;ProBus&lt;\/option&gt;\n                                    &lt;option value=&quot;ProCMS&quot; &gt;ProCMS&lt;\/option&gt;\n                                    &lt;option value=&quot;ProFrame C&quot; &gt;ProFrame C&lt;\/option&gt;\n                                    &lt;option value=&quot;ProFrame Java&quot; &gt;ProFrame Java&lt;\/option&gt;\n                                    &lt;option value=&quot;ProGroup&quot; &gt;ProGroup&lt;\/option&gt;\n                                    &lt;option value=&quot;ProObject 7 Framework&quot; &gt;ProObject 7 Framework&lt;\/option&gt;\n                                    &lt;option value=&quot;ProObject 7 Runtime&quot; &gt;ProObject 7 Runtime&lt;\/option&gt;\n                                    &lt;option value=&quot;ProPaaS&quot; &gt;ProPaaS&lt;\/option&gt;\n                                    &lt;option value=&quot;ProSync&quot; &gt;ProSync&lt;\/option&gt;\n                                    &lt;option value=&quot;ProVDI&quot; &gt;ProVDI&lt;\/option&gt;\n                                    &lt;option value=&quot;ProZone&quot; &gt;ProZone&lt;\/option&gt;\n                                    &lt;option value=&quot;SysMaster&quot; &gt;SysMaster&lt;\/option&gt;\n                                    &lt;option value=&quot;TOP&quot; &gt;TOP&lt;\/option&gt;\n                                    &lt;option value=&quot;Tibero&quot; &gt;Tibero&lt;\/option&gt;\n                                    &lt;option value=&quot;Tmax&quot; &gt;Tmax&lt;\/option&gt;\n                                    &lt;option value=&quot;Tmax OS&quot; &gt;Tmax OS&lt;\/option&gt;\n                                    &lt;option value=&quot;Tmax Office&quot; &gt;Tmax Office&lt;\/option&gt;\n                                    &lt;option value=&quot;TmaxRQS&quot; &gt;TmaxRQS&lt;\/option&gt;\n                                    &lt;option value=&quot;TmaxWorkSpace&quot; &gt;TmaxWorkSpace&lt;\/option&gt;\n                                    &lt;option value=&quot;ToGate&quot; &gt;ToGate&lt;\/option&gt;\n                                    &lt;option value=&quot;WebtoB&quot; &gt;WebtoB&lt;\/option&gt;\n                                    &lt;option value=&quot;ZetaData&quot; &gt;ZetaData&lt;\/option&gt;\n                                &lt;\/select&gt;\n                                &lt;label&gt;Category&lt;\/label&gt;\n                                &lt;select name=&quot;ctgr&quot; multiple&gt;\n                                    &lt;option value=&quot;Change Request&quot; selected&gt;Change Request&lt;\/option&gt;\n                                    &lt;option value=&quot;Enhancement Request&quot; selected&gt;Enhancement Request&lt;\/option&gt;\n                                    &lt;option value=&quot;Technical Support&quot; selected&gt;Technical Support&lt;\/option&gt;\n                                    &lt;option value=&quot;Defect&quot; selected&gt;Defect&lt;\/option&gt;\n                                    &lt;option value=&quot;Binary Request&quot;&gt;Binary Request&lt;\/option&gt;\n                                &lt;\/select&gt;\n                            &lt;input type=submit value=Search&gt;\n                        &lt;\/div&gt;\n                        &lt;a href=&quot;javascript:doDisplay();&quot;&gt;\uac80\uc0c9 \uc635\uc158&lt;\/a&gt;\n                    &lt;\/form&gt;\n\n                &lt;\/div&gt;\n\n                &lt;aside&gt;\n                    &lt;div&gt;\n                            &lt;aside&gt;\n                                &lt;h4&gt;About&lt;\/h4&gt;\n                            &lt;\/aside&gt;\n                    &lt;\/div&gt;\n                &lt;\/aside&gt;\n\n            &lt;\/section&gt;\n\n            &lt;footer&gt;\n                &lt;div&gt;&lt;\/div&gt;\n            &lt;\/footer&gt;\n\n        &lt;\/main&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n<h2>result.html<\/h2>\n<p>\uc57d\uc18d\ub41c request args \uac00 \uc785\ub825\ub410\uc744 \ub54c\uc5d0 \ub9ac\ud134\ub418\ub294 \ud398\uc774\uc9c0\ub85c, \uac80\uc0c9\ucc3d \uc678\uc5d0 \uac80\uc0c9 \uacb0\uacfc\uc640 pagination\uc744 \uc704\ud55c navigator \uac00 \ucd94\uac00\ub3fc\uc788\ub2e4.<\/p>\n<pre><code class=\"language-html\">&lt;!DOCTYPE html&gt;\n&lt;html lang=&quot;ko-KR&quot;&gt;\n    &lt;head&gt;  \n        &lt;meta charset=&quot;UTF-8&quot;&gt;\n        &lt;title&gt;{{ s }} &#8211; Search for IMS&lt;\/title&gt;\n        &lt;script type=&quot;text\/javascript&quot;&gt;\n            var bDisplay = true;\n            function doDisplay(){\n                var con = document.getElementById(&quot;sOpts&quot;);\n                if(con.style.display == &#039;none&#039;){\n                    con.style.display = &#039;block&#039;;\n                }\n                else{\n                    con.style.display = &#039;none&#039;;\n                }\n            }\n        &lt;\/script&gt;\n        &lt;style&gt;\n            #sOptsOrder li,ul {\n                list-style:none;\n                margin: 0 0 0 0;\n                padding: 0 0 0 0;\n            }\n            #sOpts select[multiple]{\n                height:120px;\n            }\n            #sOpts select[multiple]::-webkit-scrollbar{\n                display:none;\n            }\n        &lt;\/style&gt;\n    &lt;\/head&gt;\n\n    &lt;body&gt;\n        &lt;main&gt;\n            &lt;header&gt;\n                &lt;div&gt;\n                    &lt;a href=&quot;\/&quot;&gt;&lt;h1 class=&quot;white mb-0&quot;&gt;Search for IMS&lt;\/h1&gt;&lt;\/a&gt;\n                &lt;\/div&gt;\n            &lt;\/header&gt;\n\n            &lt;section&gt;\n                &lt;div&gt;\n                    &lt;p&gt;\uac80\uc0c9\uacb0\uacfc: {{ pagination[&#039;max&#039;] }} \uac74&lt;\/p&gt;\n                    {% for iss in result %}\n                        &lt;article&gt;\n                            &lt;div&gt;\n                                &lt;ul&gt;\n                                    &lt;li&gt;\n                                        &lt;span&gt;{{ iss[&#039;_source&#039;][&#039;Registered date&#039;] }}&lt;\/span&gt;\n                                    &lt;\/li&gt;\n                                    &lt;li&gt;\n                                        &lt;span&gt;in &lt;\/span&gt;\n                                        &lt;a href=&quot;#&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Customer&#039;] }}&lt;\/a&gt; | &lt;a href=&quot;#&quot; class=&quot;entry-category&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Project&#039;] }}&lt;\/a&gt;\n                                    &lt;\/li&gt;\n                                    &lt;li&gt;\n                                        &lt;a href=&quot;#&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Reporter&#039;] }}&lt;\/a&gt;&lt;\/li&gt;\n                                    &lt;li&gt;\n                                        &lt;a href=&quot;#&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Product&#039;] }} {{ iss[&#039;_source&#039;][&#039;Version&#039;] }}&lt;\/a&gt; | &lt;a href=&quot;#&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Module&#039;] }}&lt;\/a&gt; | &lt;a href=&quot;#&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Category&#039;] }}&lt;\/a&gt;\n                                    &lt;\/li&gt;\n                                &lt;\/ul&gt; \n                                &lt;h2&gt;&lt;a href=&quot;\/issueView?issueId={{ iss[&#039;_source&#039;][&#039;Issue Number&#039;] }}&quot; target=&quot;_blank&quot;&gt;{{ iss[&#039;_source&#039;][&#039;Issue Number&#039;] }} - {{ iss[&#039;_source&#039;][&#039;Subject&#039;] }}&lt;\/a&gt;&lt;\/h2&gt;    \n                                &lt;div&gt;\n                                    &lt;a href=&quot;\/issueView?issueId={{ iss[&#039;_source&#039;][&#039;Issue Number&#039;] }}&quot;target=&quot;_blank&quot;&gt;https:\/\/ims.tmaxsoft.com\/tody\/ims\/issue\/issueView.do?issueId={{ iss[&#039;_source&#039;][&#039;Issue Number&#039;] }}&lt;\/a&gt;\n                                &lt;\/div&gt;\n                                &lt;div&gt;\n                                    &lt;p&gt;{{ iss[&#039;_source&#039;][&#039;Issue Details&#039;] }}&lt;\/p&gt;\n                                &lt;\/div&gt;\n                                &lt;ul&gt;\n                                    &lt;li&gt;\n                                        &lt;span&gt;SCORE: {{ iss[&#039;_score&#039;] }}&lt;\/span&gt;\n                                    &lt;\/li&gt;\n                                &lt;\/ul&gt;\n                            &lt;\/div&gt;\n                        &lt;\/article&gt;\n                    {% endfor %}\n\n                    &lt;nav&gt;\n                        &lt;h2&gt;\ud398\uc774\uc9c0 \ud0d0\uc0c9&lt;\/h2&gt;\n                        &lt;div&gt;\n                            {% if pagination[&#039;current&#039;] &lt;= 4 %}\n                                {% if pagination[&#039;total&#039;] &lt;= 8 %}\n                                    {% for p in range(1,pagination[&#039;total&#039;]+1) %}\n                                        {% if p == pagination[&#039;current&#039;] %}\n                                            &lt;span aria-current=&#039;page&#039; class=&#039;page-numbers current&#039;&gt;{{ p }}&lt;\/span&gt;\n                                        {% else %}\n                                            &lt;a class=&#039;page-numbers&#039; href=&#039;?s={{ s }}&amp;product={{ opts[&#039;product&#039;] }}&amp;p={{ p }}&amp;sort={{ opts[&#039;sort&#039;] }}&amp;ctgr={{ opts[&#039;ctgr&#039;] }}&#039;&gt;{{ p }}&lt;\/a&gt;\n                                        {% endif %}\n                                    {% endfor %}\n                                {% else %}\n                                    {% for p in range(1,9) %}\n                                        {% if p == pagination[&#039;current&#039;] %}\n                                            &lt;span aria-current=&#039;page&#039; class=&#039;page-numbers current&#039;&gt;{{ p }}&lt;\/span&gt;\n                                        {% else %}\n                                            &lt;a class=&#039;page-numbers&#039; href=&#039;?s={{ s }}&amp;product={{ opts[&#039;product&#039;] }}&amp;p={{ p }}&amp;sort={{ opts[&#039;sort&#039;] }}&amp;ctgr={{ opts[&#039;ctgr&#039;] }}&#039;&gt;{{ p }}&lt;\/a&gt;\n                                        {% endif %}\n                                    {% endfor %}\n                                {% endif %}\n                            {% else %}\n                                {% if pagination[&#039;total&#039;] &gt; pagination[&#039;current&#039;]+4 %}\n                                        {% for p in range(pagination[&#039;current&#039;]-3,pagination[&#039;current&#039;]+5) %}\n                                            {% if p == pagination[&#039;current&#039;] %}\n                                                &lt;span aria-current=&#039;page&#039; class=&#039;page-numbers current&#039;&gt;{{ p }}&lt;\/span&gt;\n                                            {% else %}\n                                                &lt;a class=&#039;page-numbers&#039; href=&#039;?s={{ s }}&amp;product={{ opts[&#039;product&#039;] }}&amp;p={{ p }}&amp;sort={{ opts[&#039;sort&#039;] }}&amp;ctgr={{ opts[&#039;ctgr&#039;] }}&#039;&gt;{{ p }}&lt;\/a&gt;\n                                            {% endif %}\n                                        {% endfor %}\n                                {% else %}\n                                        {% for p in range(pagination[&#039;total&#039;]-5,pagination[&#039;total&#039;]+1) %}\n                                            {% if p == pagination[&#039;current&#039;] %}\n                                                &lt;span aria-current=&#039;page&#039; class=&#039;page-numbers current&#039;&gt;{{ p }}&lt;\/span&gt;\n                                            {% else %}\n                                                &lt;a class=&#039;page-numbers&#039; href=&#039;?s={{ s }}&amp;product={{ opts[&#039;product&#039;] }}&amp;p={{ p }}&amp;sort={{ opts[&#039;sort&#039;] }}&amp;ctgr={{ opts[&#039;ctgr&#039;] }}&#039;&gt;{{ p }}&lt;\/a&gt;\n                                            {% endif %}\n                                        {% endfor %}\n                                {% endif %}\n                            {% endif %}\n                        &lt;\/div&gt;\n                    &lt;\/nav&gt;\n                &lt;\/div&gt;\n\n                &lt;aside&gt;\n                    &lt;div&gt;\n                            &lt;aside&gt;\n                                &lt;h4&gt;Search&lt;\/h4&gt;\n                                &lt;div&gt;\n                                    &lt;form method=&quot;POST&quot;&gt;\n                                        &lt;p&gt;\n                                            &lt;input type=&quot;text&quot; name=&quot;s&quot; value=&quot;{{ s }}&quot;&gt;\n                                        &lt;\/p&gt;\n                                        &lt;div id=&quot;sOptsOrder&quot;&gt;\n                                            &lt;li&gt;\n                                            {% if opts[&#039;sort&#039;]==&#039;latest&#039; %}\n                                            &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;accuracy&quot;&gt;&lt;label&gt;order by score&lt;\/label&gt;&lt;\/ul&gt;\n                                            &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;latest&quot; checked&gt;&lt;label&gt;order by registered date&lt;\/label&gt;&lt;\/ul&gt;\n                                            {% else %}\n                                            &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;accuracy&quot; checked&gt;&lt;label&gt;order by score&lt;\/label&gt;&lt;\/ul&gt;\n                                            &lt;ul&gt;&lt;input type=&quot;radio&quot; name=&quot;sort&quot; value=&quot;latest&quot;&gt;&lt;label&gt;order by registered date&lt;\/label&gt;&lt;\/ul&gt;\n                                            {% endif %}\n                                            &lt;\/li&gt;&lt;br&gt;\n                                        &lt;\/div&gt;\n                                        &lt;div id=&quot;sOpts&quot; style=&quot;display:none&quot;&gt;\n                                        &lt;label&gt;Product&lt;\/label&gt;\n                                        &lt;select name=&quot;product&quot;&gt;\n                                            &lt;option value=&quot;All&quot;&gt;All&lt;\/option&gt;\n                                            {% if opts[&#039;product&#039;] == &#039;API Gateway&#039; %}&lt;option value=&quot;API Gateway&quot;  selected&gt;API Gateway&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;API Gateway&quot; &gt;API Gateway&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;AnyLink Over Tmax&#039; %}&lt;option value=&quot;AnyLink Over Tmax&quot;  selected&gt;AnyLink Over Tmax&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;AnyLink Over Tmax&quot; &gt;AnyLink Over Tmax&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;AnyMiner&#039; %}&lt;option value=&quot;AnyMiner&quot;  selected&gt;AnyMiner&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;AnyMiner&quot; &gt;AnyMiner&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;BizMaster&#039; %}&lt;option value=&quot;BizMaster&quot;  selected&gt;BizMaster&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;BizMaster&quot; &gt;BizMaster&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;HyperData&#039; %}&lt;option value=&quot;HyperData&quot;  selected&gt;HyperData&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;HyperData&quot; &gt;HyperData&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;HyperLoader&#039; %}&lt;option value=&quot;HyperLoader&quot;  selected&gt;HyperLoader&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;HyperLoader&quot; &gt;HyperLoader&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;InfiniCache&#039; %}&lt;option value=&quot;InfiniCache&quot;  selected&gt;InfiniCache&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;InfiniCache&quot; &gt;InfiniCache&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;InfiniLink&#039; %}&lt;option value=&quot;InfiniLink&quot;  selected&gt;InfiniLink&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;InfiniLink&quot; &gt;InfiniLink&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;JEUS&#039; %}&lt;option value=&quot;JEUS&quot;  selected&gt;JEUS&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;JEUS&quot; &gt;JEUS&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;JMaker&#039; %}&lt;option value=&quot;JMaker&quot;  selected&gt;JMaker&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;JMaker&quot; &gt;JMaker&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;K-DB&#039; %}&lt;option value=&quot;K-DB&quot;  selected&gt;K-DB&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;K-DB&quot; &gt;K-DB&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;OpenFrame&#039; %}&lt;option value=&quot;OpenFrame&quot;  selected&gt;OpenFrame&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;OpenFrame&quot; &gt;OpenFrame&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProObject 7 Framework&#039; %}&lt;option value=&quot;ProObject 7 Framework&quot;  selected&gt;ProObject 7 Framework&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProObject 7 Framework&quot; &gt;ProObject 7 Framework&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProObject 7 Runtime&#039; %}&lt;option value=&quot;ProObject 7 Runtime&quot;  selected&gt;ProObject 7 Runtime&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProObject 7 Runtime&quot; &gt;ProObject 7 Runtime&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProPaaS&#039; %}&lt;option value=&quot;ProPaaS&quot;  selected&gt;ProPaaS&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProPaaS&quot; &gt;ProPaaS&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProSync&#039; %}&lt;option value=&quot;ProSync&quot;  selected&gt;ProSync&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProSync&quot; &gt;ProSync&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProSync Manager&#039; %}&lt;option value=&quot;ProSync Manager&quot;  selected&gt;ProSync Manager&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProSync Manager&quot; &gt;ProSync Manager&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ProVDI&#039; %}&lt;option value=&quot;ProVDI&quot;  selected&gt;ProVDI&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ProVDI&quot; &gt;ProVDI&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;SysMaster&#039; %}&lt;option value=&quot;SysMaster&quot;  selected&gt;SysMaster&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;SysMaster&quot; &gt;SysMaster&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;TOP&#039; %}&lt;option value=&quot;TOP&quot;  selected&gt;TOP&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;TOP&quot; &gt;TOP&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;Tibero&#039; %}&lt;option value=&quot;Tibero&quot;  selected&gt;Tibero&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Tibero&quot; &gt;Tibero&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;Tmax&#039; %}&lt;option value=&quot;Tmax&quot;  selected&gt;Tmax&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Tmax&quot; &gt;Tmax&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;Tmax OS&#039; %}&lt;option value=&quot;Tmax OS&quot;  selected&gt;Tmax OS&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Tmax OS&quot; &gt;Tmax OS&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;Tmax Office&#039; %}&lt;option value=&quot;Tmax Office&quot;  selected&gt;Tmax Office&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Tmax Office&quot; &gt;Tmax Office&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;TmaxRQS&#039; %}&lt;option value=&quot;TmaxRQS&quot;  selected&gt;TmaxRQS&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;TmaxRQS&quot; &gt;TmaxRQS&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;TmaxWorkSpace&#039; %}&lt;option value=&quot;TmaxWorkSpace&quot;  selected&gt;TmaxWorkSpace&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;TmaxWorkSpace&quot; &gt;TmaxWorkSpace&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ToGate&#039; %}&lt;option value=&quot;ToGate&quot;  selected&gt;ToGate&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ToGate&quot; &gt;ToGate&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;WebtoB&#039; %}&lt;option value=&quot;WebtoB&quot;  selected&gt;WebtoB&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;WebtoB&quot; &gt;WebtoB&lt;\/option&gt;{% endif %}\n                                            {% if opts[&#039;product&#039;] == &#039;ZetaData&#039; %}&lt;option value=&quot;ZetaData&quot;  selected&gt;ZetaData&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;ZetaData&quot; &gt;ZetaData&lt;\/option&gt;{% endif %}\n                                        &lt;\/select&gt;\n                                        &lt;label&gt;Category&lt;\/label&gt;\n                                        &lt;select name=&quot;ctgr&quot; multiple&gt;\n                                            {% if &#039;Change Request&#039; in opts[&#039;rctgr&#039;] %}&lt;option value=&quot;Change Request&quot; selected&gt;Change Request&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Change Request&quot;&gt;Change Request&lt;\/option&gt;{% endif %}\n                                            {% if &#039;Enhancement Request&#039; in opts[&#039;rctgr&#039;] %}&lt;option value=&quot;Enhancement Request&quot; selected&gt;Enhancement Request&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Enhancement Request&quot;&gt;Enhancement Request&lt;\/option&gt;{% endif %}\n                                            {% if &#039;Technical Support&#039; in opts[&#039;rctgr&#039;] %}&lt;option value=&quot;Technical Support&quot; selected&gt;Technical Support&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Technical Support&quot;&gt;Technical Support&lt;\/option&gt;{% endif %}\n                                            {% if &#039;Defect&#039; in opts[&#039;rctgr&#039;] %}&lt;option value=&quot;Defect&quot; selected&gt;Defect&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Defect&quot;&gt;Defect&lt;\/option&gt;{% endif %}\n                                            {% if &#039;Binary Request&#039; in opts[&#039;rctgr&#039;] %}&lt;option value=&quot;Binary Request&quot; selected&gt;Binary Request&lt;\/option&gt;\n                                            {% else %}&lt;option value=&quot;Binary Request&quot;&gt;Binary Request&lt;\/option&gt;{% endif %}\n                                        &lt;\/select&gt;\n                                        &lt;input type=submit value=Search&gt;\n                                        &lt;\/div&gt;\n                                        &lt;a href=&quot;javascript:doDisplay();&quot;&gt;\uac80\uc0c9 \uc635\uc158&lt;\/a&gt;\n                                    &lt;\/form&gt;\n                                &lt;\/div&gt;\n                            &lt;\/aside&gt;\n                    &lt;\/div&gt;\n                &lt;\/aside&gt;\n            &lt;\/section&gt;\n\n            &lt;footer&gt;\n                &lt;div&gt;&lt;\/div&gt;\n            &lt;\/footer&gt;\n\n        &lt;\/main&gt;\n    &lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 4 \u2013 Flask \uc6f9\uc11c\ube44\uc2a4 elasticsearch\uc5d0 \ud544\uc694\ud55c \ub370\uc774\ud130\ub294 \ub2e4 \uc0c9\uc778\ud574\ub480\uae30 \ub54c\ubb38\uc5d0 \uac80\uc0c9\uc5d4\uc9c4 \uc790\uccb4\ub294 \ub2e4 \ub9cc\ub4e4\uc5b4\uc84c\uace0 \uc11c\ube44\uc2a4\ub97c \uc704\ud574\uc11c \uc801\ub2f9\ud55c UI \ub9cc \uc788\uc73c\uba74 \ub420 \uac83 \uac19\ub2e4. \uae30\uc874 \uc6b4\uc601\ud558\ub294 \uc6f9\ud398\uc774\uc9c0\uc5d0 \uc774\uc2dd\ud558\uace0\uc790 \ud558\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc791\uac8c \ubaa8\ub4c8\ud615\ud0dc\ub85c \ub9cc\ub4e4\uc5b4\uc11c \uac04\ub2e8\ud55c \uc2a4\ud06c\ub9bd\ud2b8\ub85c \ud574\ub2f9 \uac80\uc0c9 \uc5d4\uc9c4\uc744 \ubd88\ub7ec\uc624\uac8c\ud560 \uc218\ub3c4 \uc788\uc744 \uac83 \uac19\uc740\ub370 \uc774\uac83\ub9cc\uc73c\ub85c \uc644\uc804\ud55c \ub3c5\ub9bd \uc11c\ube44\uc2a4\ub97c \uad6c\ucd95\ud558\ub294 \uac83\uc774\uc5b4\uc11c \ud06c\uac8c \ub2e8\uacc4\ub97c \ub098\ub204\uc5b4\uc11c \ub9cc\ub4e4\uc9c0\ub294 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[12,40],"tags":[],"class_list":["post-1431","post","type-post","status-publish","format-standard","hentry","category-elasticsearch","category-flask"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1431","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/comments?post=1431"}],"version-history":[{"count":0,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1431\/revisions"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=1431"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=1431"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=1431"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}