반응형
Recent Posts
Recent Comments
관리 메뉴

개발잡부

[900gle] Java High Level REST Client Query 2 본문

900gle shopping/api

[900gle] Java High Level REST Client Query 2

닉의네임 2022. 1. 26. 16:21
반응형

하.. 자바.. 진짜.. 어휴.. 이거 3일동안 삽질하게 만드네..

 

내가 원하는 구조는

function_score 하위에 query 와 , 다수의 functions로 랭킹을 조절하는 거였음 

 

 

아래의 파이썬 코드를 Java 로 바꿀려고 하니..  뭔넘의 타입이..

    script_query = {
        "function_score": {
            "query": {
                "multi_match": {
                    "query": query,
                    "fields": [
                        "name^5",
                        "category"
                    ]
                }
            },
            "functions": [
                {
                    "script_score": {
                        "script": {
                            "source": "cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
                            "params": {
                                "query_vector": query_vector
                            }
                        }
                    },
                    "weight": 1
                }
            ]
        }
    }

 

 

아래의 High level client .. Java 코드로 결과를 출력하면

        FunctionScoreQueryBuilder functionScoreQueryBuilder = new FunctionScoreQueryBuilder(
                QueryBuilders.multiMatchQuery(searchWord, "name", "category"),
                new FunctionScoreQueryBuilder.FilterFunctionBuilder[]{
                        new FunctionScoreQueryBuilder.FilterFunctionBuilder(
                                new ScriptScoreFunctionBuilder(
                                        new Script(
                                                ScriptType.INLINE,
                                                Script.DEFAULT_SCRIPT_LANG,
                                                "cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
                                                map)

                                )
                        )

                }
        );

결과 출력 

얼추 비슷하게 나옴.. 집에가서 테스트 해봐야지..

{
  "function_score" : {
    "query" : {
      "multi_match" : {
        "query" : "나이키",
        "fields" : [
          "category^1.0",
          "name^1.0"
        ],
        "type" : "best_fields",
        "operator" : "OR",
        "slop" : 0,
        "prefix_length" : 0,
        "max_expansions" : 50,
        "zero_terms_query" : "NONE",
        "auto_generate_synonyms_phrase_query" : true,
        "fuzzy_transpositions" : true,
        "boost" : 1.0
      }
    },
    "functions" : [
      {
        "filter" : {
          "match_all" : {
            "boost" : 1.0
          }
        },
        "script_score" : {
          "script" : {
            "source" : "cosineSimilarity(params.query_vector, 'feature_vector') * doc['weight'].value * doc['populr'].value / doc['name'].length + doc['category'].length",
            "lang" : "painless",
            "params" : {
              "query_vector" : [
                -0.1213123
              ]
            }
          }
        }
      }
    ],
    "score_mode" : "multiply",
    "max_boost" : 3.4028235E38,
    "boost" : 1.0
  }
}

 

문제발생

필드의 길이값을 가져오는 부분을 .keyword 타입으로 맵핑해줘야 겠음

fielddata:true 이것도 될 것 같기도한데..  메모리 사용 이슈를 확인해봐야함

 

 

반응형

'900gle shopping > api' 카테고리의 다른 글

[900] Java High Level REST Client Query 3  (0) 2022.01.27
[900gle] Search Template  (0) 2022.01.25
[900] Java High Level REST Client Query  (0) 2022.01.24
[900] Search API  (0) 2022.01.19
[900gle] Text embedding API  (0) 2022.01.19
Comments