3

postgres データベースにはテーブル table1 があり、列 column1 のタイプはテキストです。そして、その列へのインデックスを作成しました CREATE INDEX idx_column1 ON table1 USING gin (to_tsvector('english', column1));

問題は、なぜこのクエリを実行するのかということです

SELECT *
FROM table1
where to_tsvector('english', column1) @@ to_tsquery('searchedText')

インデックスが使用されていますが、このクエリではインデックスは使用されていません

SELECT *
FROM table1
where ts_match_vq(to_tsvector('english', column1),to_tsquery('searchedText'))
4

1 に答える 1

2

当てずっぽう:

vector @@ queryと定義されている

CREATE OPERATOR @@(
  PROCEDURE = ts_match_vq,
  LEFTARG = tsvector,
  RIGHTARG = tsquery,
  COMMUTATOR = @@,
  RESTRICT = tsmatchsel,
  JOIN = tsmatchjoinsel);

かなりtsmatchjoinsel多くのことが行われています (何を聞かないでください。この種の C は私には理解できません....) しかし、さまざまな関数を調べると、いくつかの計算が必要になります。直接使用する場合 ts_match_vqは、これらの計算をバイパスします。そのためts_match_vq、ドキュメントでは決して言及されておらず@@、適切な関数とそれに付随するすべてのものを呼び出すため、常に使用する必要があります。

于 2013-07-25T12:09:31.307 に答える