2017-03-27 3 views
0

Postgres FTS 쿼리에서 검색 키워드가 길었습니다. 쿼리는 수백 개의 문서를 검색하고 검색 키워드가 포함 된 문서를 선택합니다. 결과적으로 문서와 일치하는 검색 키워드를 표시하는 열이 필요하므로 문서를 더 그룹화하는 데 사용할 수 있습니다. ts_headline의 텍스트에서 직접 강조 표시된 일치 항목은 강조 표시된 용어가 여러 가지 형식으로되어 있고 결과가 불규칙하기 때문에이를 허용하지 않습니다. 나는이 같은 결과 싶습니다PostgreSQL에서 별도의 열로 FTS 검색어 사용

to_tsquery(‘english’, ‘Donald | Mickey | Goofy’) 

이러한 유형의 쿼리와

:

text:        keyword: 
Donald Duck’s house lorem ipsum Donald 
Mickey Mouse lorem impsum   Mickey 
Lorem ipsum goofiness    Goofy 
+0

'StartSel = "", StopSel = ""를 = 1000 ShortWord, MinWords = 1, MaxWords = 2, MaxFragments = 1 ''ts_headline' (거의 트릭을합니다.) (http://rextester.com/APDDY16089). 인접한 단어가 두 개인 경우에만 실패합니다. 'MinWords'는 '0'보다 커야하고 'MaxWords'는 'MinWords'보다 커야한다는 짜증나는 제한이 있습니다. - 어쨌든'ts_headline '없이는 가능하지 않다고 생각합니다. – pozs

답변

0
select doc, string_agg(term, ', ') 
from 
    (values 
     ('Donald Duck''s house lorem ipsum'), 
     ('Mickey Mouse lorem impsum'), 
     ('Lorem ipsum goofiness'), 
     ('Donald, Mickey, lorem impsum and Goofy') 
    ) v(doc) 
    cross join 
    (values ('Donald'),('Mickey'),('Goofy')) s (term) 
where to_tsvector(doc) @@ to_tsquery(term) 
group by doc 
; 
        doc     |  string_agg  
----------------------------------------+----------------------- 
Donald Duck's house lorem ipsum  | Donald 
Donald, Mickey, lorem impsum and Goofy | Donald, Mickey, Goofy 
Lorem ipsum goofiness     | Goofy 
Mickey Mouse lorem impsum    | Mickey