{"id":7265,"date":"2022-12-23T11:38:51","date_gmt":"2022-12-23T02:38:51","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7265"},"modified":"2022-12-23T14:50:34","modified_gmt":"2022-12-23T05:50:34","slug":"elasticsearch-functionscorequery","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7265","title":{"rendered":"ElasticSearch &#8211; FunctionScoreQuery"},"content":{"rendered":"<h1>ElasticSearch &#8211; FunctionScoreQuery<\/h1>\n<p><a href=\"https:\/\/medium.com\/@andre.luiz1987\/functionscore-query-java-api-client-d895f95acae0\">\ucc38\uc870<\/a><\/p>\n<p>. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .<\/p>\n<h2>\uc0d8\ud50c<\/h2>\n<pre><code class=\"language-java\">@Slf4j\n@Component\n@RequiredArgsConstructor\npublic class AutoCompleteRepository {\n\n    private final ElasticsearchClient client;\n\n    private FunctionScore buildFunctionScore(String field, String query, Double value) {\n        Query queryMatch = new Query\n                .Builder()\n                .match(new MatchQuery\n                        .Builder()\n                        .field(field)\n                        .query(query)\n                        .build()\n                ).build();\n\n        return new FunctionScore.Builder()\n                .new ContainerBuilder()\n                .filter(queryMatch)\n                .weight(value)\n                .build();\n    }\n\n    private FunctionScore buildFunctionScore(String field, String query, Double value, Operator operator, String analyzer) {\n        Query queryMatch = new Query\n                .Builder()\n                .match(new MatchQuery\n                        .Builder()\n                        .field(field)\n                        .operator(operator)\n                        .analyzer(analyzer)\n                        .query(query)\n                        .build()\n                ).build();\n\n        return new FunctionScore.Builder()\n                .new ContainerBuilder()\n                .filter(queryMatch)\n                .weight(value)\n                .build();\n    }\n\n    public List&lt;Hit&lt;AutoCompleteResultModel&gt;&gt; get(String queryString) throws IOException {\n\n        Query queryMatchAll = new Query.Builder().matchAll(new MatchAllQuery.Builder().build()).build();\n\n        ArrayList&lt;FunctionScore&gt; functionScores = new ArrayList&lt;&gt;();\n\n        functionScores.add(buildFunctionScore(&quot;search_string.raw&quot;, queryString, 1000.0));\n        functionScores.add(buildFunctionScore(&quot;search_string.jaso&quot;, queryString, 100.0, Operator.And, &quot;suggest_search_analyzer&quot;));\n\n        FunctionScoreQuery functionScoreQuery = new FunctionScoreQuery.Builder()\n                .query(queryMatchAll)\n                .functions(functionScores)\n                .boostMode(FunctionBoostMode.Multiply)\n                .scoreMode(FunctionScoreMode.Sum)\n                .minScore(2.0)\n                .build();\n\n        Query query = new Query.Builder().functionScore(functionScoreQuery).build();\n\n        List&lt;SortOptions&gt; sortOptions = new ArrayList&lt;&gt;();\n        sortOptions.add(SortOptions.of((b) -&gt; {\n            FieldSort fieldSort = new FieldSort.Builder().field(&quot;_score&quot;).order(SortOrder.Desc).build();\n            return b.field(fieldSort);\n        }));\n        sortOptions.add(SortOptions.of((b) -&gt; {\n            FieldSort fieldSort = new FieldSort.Builder().field(&quot;sort&quot;).order(SortOrder.Desc).build();\n            return b.field(fieldSort);\n        }));\n\n        SearchResponse&lt;AutoCompleteResultModel&gt; response = client.search(s -&gt; s\n                        .size(10)\n                        .sort(sortOptions)\n                        .index(IndexName.AUTO_COMPLETE)\n                        .query(query),\n                AutoCompleteResultModel.class\n        );\n\n        return response.hits().hits();\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>ElasticSearch &#8211; FunctionScoreQuery \ucc38\uc870 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=7265\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-7265","post","type-post","status-publish","format-standard","hentry","category-elasticsearch"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7265","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=7265"}],"version-history":[{"count":6,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7265\/revisions"}],"predecessor-version":[{"id":7274,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/7265\/revisions\/7274"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=7265"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=7265"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=7265"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}