2017-11-09 3 views
1

내가 PostgreSQL을에 전체 텍스트 검색을 사용하려고 해요 :postgresql의 전체 텍스트 검색에서 비슷한 단어를 찾는 방법?

select * 
from entertainement 
where to_tsvector('simple', name) @@ to_tsquery('simple', 'word_to_search:*') 

이 쿼리는 잘 작동하고 나는 내가 그것을 찾을 수없는 단어를 입력 일부 웹 사이트에서 발견 display.However 원하는 걸 줄 나에게 No result found for 'word_to_search'를 보여주고, 나에게 그것에 유사한 어떤 단어에 다른 약간의 명제를 줘라. 나는 단어 activityng을 넣어 예를 들어 나는

No result found for activityng 

있어하지만 나에게 말 activity을 포함하는 몇 가지 제안을 제공합니다. 나는 단어 activityns을 넣어 그러나 때 나는 가지고 :

No result found for activityns 

그러나 나는 단어 activities을 포함하는 몇 가지 제안을 얻었다. 나는 활동이 activity보다 유사하고 activities이기 때문에 그것의 논리를 이해하지 못했습니다. 나는 pg_trgmsimilarity를 사용하여이 단어의 상사 성을 알고 노력하고 내가 가지고 :

select similarity('activity','activityns'); 
similarity: 0,6666667 

select similarity('activities','activityns'); 
similarity: 0,4666667 

단어 사이의 유사성을 감지 할 수있는 다른 솔루션 거기에 더 정확한 결과를 얻을 수?

답변

1

FTS 먼저 어휘 후 비교 토큰을 줄이고, 괘는 세 글자를 비교 - (하나의 샘플에 또 다른 closerto 이유 표시) 그렇게 서로 다른 알고리즘과의 비교 결과를 비교할 수 없습니다, FTS 예를 요 여기서 :

단어를 어휘하기
pond93=# with w(v) as (values('activityns'),('activity'),('activities'),('activit')) 
select to_tsvector(v),v, to_tsvector(v) @@ to_tsquery('activ:*'),to_tsvector(v) @@ to_tsquery('activity'),to_tsvector(v) @@ to_tsquery('activit:*') from w; 
    to_tsvector |  v  | ?column? | ?column? | ?column? 
---------------+------------+----------+----------+---------- 
'activityn':1 | activityns | t  | f  | t 
'activ':1  | activity | t  | t  | f 
'activ':1  | activities | t  | t  | f 
'activit':1 | activit | t  | f  | t 
(4 rows) 

모습이 단어가 (3,4,5) 열이 감소되는 감소 (첫 번째 열) 결과가 당신에게 어휘에 따라 와일드 카드 사용을 줄 것을 살펴보고있다

이해
+0

너 무슨 뜻이야? 그러나 일부 웹 사이트에서 'activityng'을 입력하면 단어가 'activity'가 아니라 'activity'가 아니라는 단어를 제안하고 'activityns'를 입력하면 단어가 'activities'가 아니라 ' 활동 '. ** to_tsvector ** 및 ** to_tsquery **를 사용하면 유사성 문제를 해결할 수 없습니다. pg_trgm을 사용하여 입력 한 단어의 유사성과 웹 사이트의 명제를 얻으려고 시도했으며 논리가 무엇인지 밝혀 냈습니다. 따라서 단어의 유사성을 찾는 해결책이 있는지를 알고 싶습니다. –

+0

당신은 그 사이트가 포스트그레스를 사용한다고 생각하게합니까? (그리고 예 - pg_trgm이라고 부르는 상자 포스트 그레스 솔루션의 가장 좋은 점은 유사 함) –

+0

단어의 제안은 postgresql 전체 텍스트 검색의 기능처럼 보입니다. –

관련 문제