2016-12-26 15 views
1

Я пытаюсь реализовать поиск в веб-приложении, где я могу выполнять полный текстовый поиск по нескольким полям в таблице, которые также поддерживают частичные или слегка отклики на запросы.нечеткий полнотекстовый поиск в postgres

Мой план состоит в том, чтобы создать материализованное представление, а затем создать индекс для поиска нечетких (триграмм). Но я не совсем уверен, что это правильный путь.

Вот что у меня есть. Я уверен, что SQL неверен, но я действительно не знаю, как его исправить. Я по-прежнему новичок в этом. Первый раз работает вне ORM.

Я использую postgres 9.5.5.

CREATE MATERIALIZED VIEW search AS 
SELECT word FROM ts_stat(
    'SELECT (
     setweight(to_tsvector(''simple'', location.name), ''A'') 
     || setweight(to_tsvector(''simple'',locations.street), ''B'') 
     || setweight(to_tsvector(''simple'',locations.state), ''C'') 
     || setweight(to_tsvector(''simple'',locations.city), ''C'') 
     || setweight(to_tsvector(''simple'',locations.zip,), ''B'') AS document, 
    ) 
    FROM locations 
    GROUP BY locations.id 
    ' 
); 

места ТАБЛИЦА
имя
улица
состояние
город
почтовый
геолокации

+0

* "нечеткий поиск" * может быть в значительной степени все. Пожалуйста, объясните * точно, что вы пытаетесь достичь. И добавьте свое определение таблицы, мощности, версию Postgres. –

+0

Обновленный вопрос, я надеюсь, что это яснее. Спасибо за советы! – user3791980

+0

Определение таблицы включает типы данных и ограничения. Пример: http://stackoverflow.com/a/9790225/939860 –

ответ

2

Материализованное определение представления в этом вопросе, кажется, не имеет никакого смысла. ts_stat() предназначен для отладки текстового поиска.

Full text search полностью отличается от сопоставления с LIKE или регулярными выражениями (с использованием индексов триграмм).

Нечеткое совпадение шаблонов на нескольких столбцах для шаблонов «слегка выключено» вообще не является тривиальным. Настройка должна учитывать ваши точные требования, чтобы получить «правильные» результаты и исключить «неправильные», сохраняя при этом производительность.

Для начала:

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