{"id":1147,"date":"2019-08-22T11:42:49","date_gmt":"2019-08-22T02:42:49","guid":{"rendered":"https:\/\/oboki.net\/workspace\/?p=1147"},"modified":"2019-09-01T22:19:50","modified_gmt":"2019-09-01T13:19:50","slug":"elasticsearch-%ea%b2%80%ec%83%89%ec%97%94%ec%a7%84-%eb%a7%8c%eb%93%a4%ea%b8%b0-3-python-%ea%b2%80%ec%83%89-%eb%aa%a8%eb%93%88-%eb%a7%8c%eb%93%a4%ea%b8%b0","status":"publish","type":"post","link":"https:\/\/oboki.net\/workspace\/python\/elasticsearch-%ea%b2%80%ec%83%89%ec%97%94%ec%a7%84-%eb%a7%8c%eb%93%a4%ea%b8%b0-3-python-%ea%b2%80%ec%83%89-%eb%aa%a8%eb%93%88-%eb%a7%8c%eb%93%a4%ea%b8%b0\/","title":{"rendered":"[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 3 &#8211; Python \uac80\uc0c9 \ubaa8\ub4c8 \ub9cc\ub4e4\uae30"},"content":{"rendered":"<h1>[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 3 &#8211; Python \uac80\uc0c9 \ubaa8\ub4c8 \ub9cc\ub4e4\uae30<\/h1>\n<p>IMS \ub370\uc774\ud130\ub294 \uc55e\uc11c Elasticsearch\uc5d0 \uc778\ub371\uc2f1 \ud574\ub450\uc5c8\uace0 \uc774\ub97c \uac80\uc0c9\ud558\ub294 \ubaa8\ub4c8\uc744 Python API \ub97c \uc774\uc6a9\ud574\uc11c \ub9cc\ub4e4\uc5b4\ubcf8\ub2e4. Python Flask\ub85c \ub9cc\ub4e4\uba74 \uc6f9\uc11c\ube44\uc2a4\ub97c \uc9c1\uc811 \ud560 \uc218\ub3c4 \uc788\uace0 \ub2e4\ub978 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \uc774\uc2dd\ud558\uae30 \uc704\ud55c HTTP API \ub97c \ub9cc\ub4e4\uc5b4\ub0b4\uae30\ub3c4 \uac04\ud3b8\ud55c \uac83 \uac19\ub2e4.<\/p>\n<h2>\ucffc\ub9ac \ud15c\ud50c\ub9bf<\/h2>\n<p>\uba3c\uc800 \uac80\uc0c9\uc5d0 \uc0ac\uc6a9\ud560 \ucffc\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud558\ub294\ub370 kibana dev tools \uc5d0\uc11c SQL \ud234\ucc98\ub7fc \ucffc\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\ubcfc \uc218 \uc788\ub2e4. IMS \uac80\uc0c9\uc5d4\uc9c4\uc5d0\uc11c\ub294 \ub2e4\uc74c\uacfc \uac19\uc740 \ucffc\ub9ac\ub97c \uc0ac\uc6a9\ud55c\ub2e4.<\/p>\n<p>full-text \uac80\uc0c9\uc774 \ud544\uc694\ud55c <code>Issue Details<\/code>, <code>Subject<\/code>, <code>Action Log<\/code> \ud544\ub4dc\ub97c \uc911\uc2ec\uc73c\ub85c \uac80\uc0c9\uc774 \uc774\ub904\uc9c0\ub3c4\ub85d \ud560 \uac83\uc774\ubbc0\ub85c, \uc138 \ud544\ub4dc\uc5d0 <code>match_phrase<\/code> \uac80\uc0c9 \uc870\uac74\uc744 \ub450\uace0 <code>Product<\/code>, <code>Category<\/code> \ud544\ub4dc\uc5d0\ub294 \ud544\ud130 \uc870\uac74\uc744 \uc124\uc815\ud55c\ub2e4. <code>_source<\/code> \uc5d0\ub294 \uac80\uc0c9 \uacb0\uacfc \ud654\uba74\uc5d0\uc11c \ubcf4\uc5ec\uc904 \uc694\uc57d \uc815\ubcf4\uc5d0 \ud544\uc694\ud55c \uc815\ubcf4\ub4e4\uc744 \ubaa8\ub450 \uc120\ud0dd\ud55c\ub2e4.<\/p>\n<p><code>vi body.json<\/code><\/p>\n<pre><code class=\"language-json\">{\n    &quot;_source&quot;: [\n        &quot;Issue Number&quot;,\n        &quot;Subject&quot;,\n        &quot;Issue Details&quot;,\n        &quot;Reporter&quot;,\n        &quot;Customer&quot;,\n        &quot;Project&quot;,\n        &quot;Registered date&quot;,\n        &quot;Product&quot;,\n        &quot;Version&quot;,\n        &quot;Category&quot;,\n        &quot;Module&quot;\n    ],\n    &quot;size&quot;:10,\n    &quot;from&quot;:0,\n    &quot;query&quot;: {\n        &quot;bool&quot;: {\n            &quot;must&quot;: [\n                {\n                    &quot;bool&quot;: {\n                        &quot;should&quot;: [\n                            {\n                                &quot;multi_match&quot;: {\n                                    &quot;query&quot;: &quot;&quot;,\n                                    &quot;fields&quot;: [\n                                        &quot;Issue Details&quot;,\n                                        &quot;Subject&quot;,\n                                        &quot;Action Log&quot;\n                                    ],\n                                    &quot;operator&quot;: &quot;and&quot;\n                                }\n                            },\n                            {\n                                &quot;match_phrase&quot;:{\n                                    &quot;Issue Details&quot;: {\n                                        &quot;query&quot;:&quot;&quot;,\n                                        &quot;boost&quot;: 10\n                                    }\n                                }\n                            },\n                            {\n                                &quot;match_phrase&quot;:{\n                                    &quot;Action Log&quot;: {\n                                        &quot;query&quot;:&quot;&quot;,\n                                        &quot;boost&quot;: 10\n                                    }\n                                }\n                            },\n                            {\n                                &quot;match_phrase&quot;:{\n                                    &quot;Subject&quot;: {\n                                        &quot;query&quot;:&quot;&quot;,\n                                        &quot;boost&quot;: 10\n                                    }\n                                }\n                            }\n                        ]\n                    }\n                }\n            ],\n            &quot;filter&quot;:[\n                {\n                    &quot;match&quot;: {\n                        &quot;Product&quot;: &quot;&quot;\n                    }\n                },\n                {\n                    &quot;terms&quot;: {\n                        &quot;Category&quot;: []\n                    }\n                }\n            ]\n        }\n    }\n}<\/code><\/pre>\n<h2>\uc774\uc288 \uac80\uc0c9 \ud568\uc218 <code>issue<\/code><\/h2>\n<p>\uc704\uc5d0\uc11c \ub9cc\ub4e4\uc5b4\ub193\uc740 json \ucffc\ub9ac \ud15c\ud50c\ub9bf\uc744 \uae30\ubc18\uc73c\ub85c, \uac80\uc0c9 \ud0a4\uc6cc\ub4dc <code>s<\/code> \ub97c \ub300\uc785\ud574 elasticsearch(<code>localhost:9200<\/code>) \ud074\ub7ec\uc2a4\ud130\uc5d0 \uacb0\uacfc\ub97c \uc870\ud68c\ud558\ub294 \ud568\uc218\ub97c \uc791\uc131. \uc81c\ud488\uba85, \uce74\ud14c\uace0\ub9ac \uadf8\ub9ac\uace0 \uc815\ub82c \ubc29\uc2dd\uacfc \uac19\uc740 \uc635\uc158 \uc124\uc815\uc744 \uc704\ud55c \uc778\uc790\ub3c4 \uc124\uc815\ud55c\ub2e4.<\/p>\n<p><code>vi search.py<\/code><\/p>\n<pre><code class=\"language-python\">from elasticsearch import Elasticsearch\nimport json\n\ndef issue(s,page=1,product=None,op=None,sort=None,ctgr=None):\n    if product == &#039;All&#039; : product = None\n    if page == None or &quot;&quot;: doc_from,doc_to = 0,10\n    else: doc_from,doc_to = (int(page)-1)*10,(int(page))*10\n\n    es_client = Elasticsearch(&quot;localhost:9200&quot;,timeout=30)\n\n    with open(&#039;.\/body.json&#039;,mode=&#039;rt&#039;) as f:\n        body = json.load(f)\n        f.close()\n\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;must&#039;][0][&#039;bool&#039;][&#039;should&#039;][0][&#039;multi_match&#039;].update({&quot;query&quot;:s})\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;must&#039;][0][&#039;bool&#039;][&#039;should&#039;][1][&#039;match_phrase&#039;][&#039;Issue Details&#039;].update({&quot;query&quot;:s})\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;must&#039;][0][&#039;bool&#039;][&#039;should&#039;][2][&#039;match_phrase&#039;][&#039;Action Log&#039;].update({&quot;query&quot;:s})\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;must&#039;][0][&#039;bool&#039;][&#039;should&#039;][3][&#039;match_phrase&#039;][&#039;Subject&#039;].update({&quot;query&quot;:s})\n    body.update({&quot;from&quot;:doc_from})\n\n    if op == &#039;or&#039;:\n        body[&#039;query&#039;][&#039;bool&#039;][&#039;must&#039;][0][&#039;bool&#039;][&#039;should&#039;][0][&#039;multi_match&#039;].update({&quot;operator&quot;:op})\n\n    if sort == &#039;latest&#039;:\n        body.update({&quot;sort&quot;:[{&quot;Registered date&quot;: {&quot;order&quot;: &quot;desc&quot;}}]})\n\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;filter&#039;][0][&#039;match&#039;].update({&quot;Product&quot;:product})\n    body[&#039;query&#039;][&#039;bool&#039;][&#039;filter&#039;][1][&#039;terms&#039;].update({&quot;Category&quot;:ctgr})\n\n    if product == None:\n        body[&#039;query&#039;][&#039;bool&#039;][&#039;filter&#039;].pop(0)\n\n    response = es_client.search(index=&quot;issue-v0.1.4&quot;,body=body)\n    hits = response[&#039;hits&#039;][&#039;hits&#039;]\n    total = response[&#039;hits&#039;][&#039;total&#039;][&#039;value&#039;]\n\n    return hits,total<\/code><\/pre>\n<p>6\ubc84\uc804\uae4c\uc9c0\ub294 \ud0c0\uc785\uc774\ub77c\ub294 \uac1c\ub150\uc774 \uc788\uc5c8\uae30\ub54c\ubb38\uc5d0 search \uba54\uc18c\ub4dc\uc5d0\uc11c <code>doc_type<\/code> \uc18d\uc131\uc744 \uc9c0\uc815\ud588\uc5b4\uc57c\ud588\ub294\ub370 7\ubc84\uc804\ubd80\ud130 \ud655\uc2e4\ud788 \uc5c6\uc5b4\uc84c\uae30\ub54c\ubb38\uc5d0 \uc9c0\uc815\ud558\uba74 \uc5d0\ub7ec\uac00 \ubc1c\uc0dd\ud55c\ub2e4. \uadf8\ub9ac\uace0 6\ubc84\uc804\uc5d0\uc11c\ub294 \uac80\uc0c9 \uacb0\uacfc\uac00 <code>[&#039;hits&#039;][&#039;total&#039;]<\/code> \uc5d0\uc11c \ubc14\ub85c \uc22b\uc790\ub85c \ubc18\ud658\ub418\uc5c8\ub294\ub370, 7\ubc84\uc804\ubd80\ud130\ub294 \uc815\ubcf4\uac00 \ucd94\uac00\ub418\uba74\uc11c \ud55c \ub2e8\uacc4 \uc544\ub798\ub85c \ub0b4\ub824\uac00 <code>[&#039;hits&#039;][&#039;total&#039;][&#039;value&#039;]<\/code> \uac12\uc5d0\uc11c \ubc1b\uc544\ubcfc \uc218 \uc788\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ElasticSearch] \uac80\uc0c9\uc5d4\uc9c4 \ub9cc\ub4e4\uae30 3 &#8211; Python \uac80\uc0c9 \ubaa8\ub4c8 \ub9cc\ub4e4\uae30 IMS \ub370\uc774\ud130\ub294 \uc55e\uc11c Elasticsearch\uc5d0 \uc778\ub371\uc2f1 \ud574\ub450\uc5c8\uace0 \uc774\ub97c \uac80\uc0c9\ud558\ub294 \ubaa8\ub4c8\uc744 Python API \ub97c \uc774\uc6a9\ud574\uc11c \ub9cc\ub4e4\uc5b4\ubcf8\ub2e4. Python Flask\ub85c \ub9cc\ub4e4\uba74 \uc6f9\uc11c\ube44\uc2a4\ub97c \uc9c1\uc811 \ud560 \uc218\ub3c4 \uc788\uace0 \ub2e4\ub978 \ud504\ub808\uc784\uc6cc\ud06c\uc5d0 \uc774\uc2dd\ud558\uae30 \uc704\ud55c HTTP API \ub97c \ub9cc\ub4e4\uc5b4\ub0b4\uae30\ub3c4 \uac04\ud3b8\ud55c \uac83 \uac19\ub2e4. \ucffc\ub9ac \ud15c\ud50c\ub9bf \uba3c\uc800 \uac80\uc0c9\uc5d0 \uc0ac\uc6a9\ud560 \ucffc\ub9ac\ub97c \ub9cc\ub4e4\uc5b4\uc57c\ud558\ub294\ub370 kibana dev tools \uc5d0\uc11c SQL \ud234\ucc98\ub7fc [&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,10],"tags":[],"class_list":["post-1147","post","type-post","status-publish","format-standard","hentry","category-elasticsearch","category-python"],"_links":{"self":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1147","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=1147"}],"version-history":[{"count":2,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1147\/revisions"}],"predecessor-version":[{"id":1150,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/posts\/1147\/revisions\/1150"}],"wp:attachment":[{"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/media?parent=1147"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/categories?post=1147"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oboki.net\/workspace\/wp-json\/wp\/v2\/tags?post=1147"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}