Вы можете использовать аннотации, такие как {Object =} или {number =}, в разделе комментариев при использовании доклета:
/** * @param {object=}xyz */
Современная IDE знает, как распознавать аннотации для JavaScript, и показывает вам указания на потенциальные проблемы в вашем коде.
Пример:
/**
*
* @param query
* @param callback
* @param {number=} ttl optional time-to-leave
*/
loadByJSONP:function loadByJSONP(query, callback, ttl) {
...do some work
}
В этом примере «ttl» является необязательным. аннотация {число =} указывает IDE, что этот параметр является необязательным. Соответственно, когда вы вызываете эту функцию только с двумя параметрами, вы не получите предупреждение.
Аннотации также могут использоваться для обозначения ожидаемого типа. это делает ваш код лучше и менее подвержен ошибкам. Вот ссылка для аннотаций:
https://developers.google.com/closure/compiler/docs/js-for-compiler
Использование Варианта 1 не приведет к замедлению поиска.
Индекс GIN
будет использоваться независимо от того, создавали ли вы его при создании экземпляра. столбец или вычисленное выражение.
Вам просто нужно изменить синтаксис запроса:
SELECT *
FROM posts
WHERE TO_TSVECTOR('english', title) @@ myquery
в первом случае или
SELECT *
FROM posts
WHERE title_vector @@ myquery
во втором случае.
Вы, вероятно, сможете немного сэкономить время, используя TS_RANK
над созданным столбцом.
Представим, что появилось 20 новых тем & 100 новых сообщений в день. Которые бы твой выбор? Что делать, если количество тем / сообщений в день вдвое больше? В пять раз больше? Десять раз? Ваш решение одного изменения по сравнению с другим?
Это примерно 36 000 сообщений в год. Неважно. Вероятно, в десять раз больше, даже на дешевой машине.
Однако вам может понадобиться третья таблица, содержащая явный tsvector, объединяющий тему и основной текст вместе. Затем вы можете использовать встроенную систему взвешивания и выполнить один поиск, чтобы обеспечить тот вид поиска, который люди обычно ожидают на форумах и т. Д. Это будет означать написание пользовательских триггеров для обновления вашего tsvector при изменении любой исходной таблицы.
Обычно я бы сохранил tsvector в поле, потому что это будет также предоставляют удобный доступ к таким вещам, как заголовок () и ранг ().