2011-09-05 52 views
2

當像執行查詢:PostgreSQL的全文索引索引可以使用1或2個字符?

select count(*) from myTextTable where tsv @@ plainto_tsquery('english', 'TERM'); 

我注意到,PostgreSQL不使用GIN索引(即我在TSV列定義)當TERM是長1或2個字符; 3個或更多字符正常工作。

我明白,索引1點或2個字符而言,該指數的規模將大大增加,但檢索包含一個快速的方式具體1個或2個字符的文本方面是我開發的應用是必不可少的。

有一些全文搜索配置參數索引1或2個字符的條款?

回答

0

這個問題一直現在解決的(A)(使用語言檢測)和(b)丟棄/重新創建GIN索引中刪除許多從網頁嘈雜的文字。我的猜測是,嘈雜的文本導致了詞位數量的激增,索引變得無法使用,或者被查詢規劃人員歸類爲這樣。 -

0

前段時間,我編寫了我自己的to_tsquery()和to_tsvector()方法(用Python),因爲我想要更多的控制權 。 AFAIK過濾發生在plainto_tsquery()中。如果替換此方法,則也可以索引單個字符。

+0

如果我執行'選擇plainto_tsvector( '英語', 'T-T')'然後它返回'[ 'TT':1]',因此它是在的tsvector可用。它似乎沒有被GIN索引索引(或被查詢優化器使用?)。我確實考慮過使用虛擬文本填充術語,但這意味着要實現我自己的空白分析等。我寧願不去那裏。 –

+0

如果我'設置ENABLE_SEQSCAN = FALSE;'然後(GIN)索引掃描** **是執行與查詢運行時間變爲18秒鐘而不是20分鐘!查詢計劃在這裏。 –

+0

你幾分鐘前的批量插入?自動真空和分析需要一些時間來實現巨大的更新。 – guettli