2016-01-31 3 views
1

Postgres не позволить конкатенации векторов таким образом:Postgres - как создать текстовый индекс поиска со взвешенными векторами?

CREATE INDEX pgweb_idx ON pgweb USING 
gin(
    setweight(to_tsvector('english', title),'A') || 
    setweight(to_tsvector('english', body), 'B') 
); 

дает

ERROR: syntax error at or near "||"

Это позволяет этот синтаксис в выбранном или обновления заявления.

Есть ли способ создать взвешенный полный текстовый индекс без добавления столбца tvector к таблице?

ответ

2

Я не могу предложить хорошее объяснение, почему это происходит в этом случае, однако вы можете решить эту проблему, добавив дополнительную пару скобок вокруг выражения

CREATE INDEX pgweb_idx ON pgweb USING 
gin(
    (setweight(to_tsvector('english', title),'A') || setweight(to_tsvector('english', body), 'B')) 
); 
+0

Как странно. Спасибо, сэр!!! –

+1

Это объясняется на странице [CREATE INDEX] (http://www.postgresql.org/docs/current/static/sql-createindex.html) документов: * Выражение обычно должно быть написано с помощью окружающих круглых скобок, так как показанном в синтаксисе. Тем не менее, круглые скобки могут быть опущены, если выражение имеет форму вызова функции. * (Индекс на основе выражения нуждается в скобках, обычный столбец не нужен) – pozs

+0

@pozs Oh ... Да, возможно, должно быть проверили эту страницу. Спасибо. –

Смежные вопросы