Как я могу преобразовать поисковый запрос Google во что-то, что я могу кормить to_tsquery () PostgreSQL?
Если там нет существующей библиотеки, как мне разобраться с поисковым запросом Google на таком языке, как PHP?
Например, я бы хотел взять следующий поисковый запрос Google:
("used cars" OR "new cars") -ford -mistubishi
И превратить его в дружественную строку to_tsquery ():
('used cars' | 'new cars') & !ford & !mistubishi
Я могу выдумать это с помощью регулярных выражений, но это лучшее, что я могу сделать. Есть ли надежный метод лексического анализа? Я также хотел бы иметь возможность поддерживать расширенные операторы поиска (например, сайт Google: и intitle :), которые будут применяться к различным полям базы данных и, следовательно, должны быть отделены от строки tsquery.
ОБНОВЛЕНИЕ: я понимаю, что со специальными операторами это становится преобразованием предложения WHERE из Google в SQL, а не из преобразования Google в tsquery. Но предложение WHERE может содержать один или несколько запросов.
Например, запрос в стиле Google:
((color:blue OR "4x4") OR style:coupe) -color:red used
Должен выдать SQL-предложение WHERE наподобие этого:
WHERE to_tsvector(description) MATCH to_tsquery('used')
AND color <> 'red'
AND ( (color = 'blue' OR to_tsvector(description) MATCH to_tsquery('4x4') )
OR style = 'coupe'
);
Я не уверен, возможно ли вышеизложенное с помощью регулярных выражений?