Как указать условия перед выполнением поиска триграмм в PostgreSQL?

Я довольно плохо знаком с нечетким поиском и триграммами в PostgreSQL. У меня есть несколько сотен тысяч продуктов в базе данных, и я хочу иметь возможность выбирать продукты, название которых наиболее близко к названию другого продукта.

После нескольких часов экспериментов и исследований я установил pg_trgm расширение и создал индекс триграммы, как это:

CREATE INDEX simpleproduct_name_lowercase
ON simpleproduct
USING gist(lower(name) gist_trgm_ops);

Следующий запрос, чем выполняется примерно за 0,07 с, что удовлетворяет на данный момент:

SELECT  'coffee' <-> lower(name) as distance, gtin, name
FROM simpleproduct
ORDER BY distance
LIMIT 10

Дело в том, что мне нужно дополнительно указать, какие продукты я хочу искать. Я предполагал, что если я сделаю это, то это будет быстрее, чем раньше, потому что я не чуствую поиск по всей базе данных, а только по определенной группе продуктов. По какой-то причине, если я сделаю, например, следующее:

SELECT  'coffee' <-> lower(name) as distance, gtin, name
FROM simpleproduct
WHERE id < 10000
ORDER BY distance
LIMIT 10

... время выполнения примерно удваивается. Кто-нибудь может объяснить, почему это так? Кроме того, если у вас есть опыт в этой области, вы бы порекомендовали не использовать PostgreSQL и, например, использовать Elastic?

0 ответов

Другие вопросы по тегам