2017-11-27 12 views
0

을 반환 SimpleFunction의 결과에`exists` 적용 나는이 포스트 그레스에서 다음 쿼리 :슬릭 3.0 포스트 그레스 SQL은 : 목록

select name from items where 'keyword' [email protected]@ any (string_to_array(name, ' ')); 

[email protected]@ 운영자가 pg_similarity module

I에서 유사성 운영자가 Slick 3을 통해이 작업을하고 싶습니다. any 기능을 적용해야합니다. 여기에 지금까지 무엇을 가지고 :

// This query does a join on several tables including the items table 
// which I want to use for filtering 
val similarTo = SimpleBinaryOperator[Boolean]("[email protected]@") 
val split = SimpleFunction.binary[String, String, List[String]]("string_to_array") 
query = query.filter { 
      case (_, item, _, _, _) => { 
       split(item.name.toLowerCase, " "). // ? 
       // something like .exists(_ => similarTo("keyword", _) 
      } 
} 

는 여기

답변

0

내가 같은 문제가있을 것입니다 미래에서 경우 누군가에 결국 일을 결국 무엇을 감사드립니다.

CREATE OR REPLACE FUNCTION has_similar_word(name VARCHAR(300), keyword VARCHAR(50)) 
    RETURNS boolean AS $$ 
BEGIN 

    -- a list of available similarity measures is available at: 
    -- https://github.com/eulerto/pg_similarity 

    set pg_similarity.jarowinkler_threshold = 0.85; 

RETURN keyword [email protected]@ any (string_to_array(name, ' ')); 
END; 
$$ 
LANGUAGE plpgsql; 

매끄러운에서

, 내 쿼리는 다음과 같이되었다 : 내가 넣어

는 데이터베이스에 대한 필터링 논리를 이동 난 그냥 내 스칼라 코드 로직을 유지하기 위해 선호하는 것

val similarTo = SimpleFunction.binary[String, String, Boolean]("has_similar_word") 
     query = query.filter { 
     case (_, item, _, _, _) => { 
      similarTo(item.name.toLowerCase, keyWordvariable) 
     } 

,하지만 지금은 불가능한 것 같습니다.