Обратный поиск в Postgresql - PullRequest
0 голосов
/ 02 октября 2018

Я хочу знать, может ли Postgresql обрабатывать следующие варианты использования?

У нас есть приложение, которое сканирует рекламу с разных платформ.Пользователи могут добавлять поисковые запросы с ключевым словом и другими атрибутами фильтров (цена, местоположение и т. Д.).Когда мы получаем новое объявление, мы хотим найти все поиски, которые соответствуют деталям объявления.

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

Это в основном обратный поиск.

ОБНОВЛЕНИЕ

Пример:

У меня есть searches table:

+----+-------------------+------------+----------+ | Id | keyword | startPrice | endPrice | +----+-------------------+------------+----------+ | 1 | iphone 8 plus | 100 | 300 | +----+-------------------+------------+----------+ | 2 | Ipohne 7 | 50 | 500 | +----+-------------------+------------+----------+ | 3 | iphone 8 | 200 | 300 | +----+-------------------+------------+----------+ | 4 | headphones iphone | 10 | 300 | +----+-------------------+------------+----------+

СейчасУ меня есть и advert объект со следующей структурой: { title: Sell Iphone 8 plus 32GB, white, price: 250 }

Я хочу сделать запрос к таблице searches, чтобы найти все поиски, которые соответствуют этому объявлению.В моем примере я ожидаю вернуть только результаты поиска 1 and 3, поскольку цена 250 находится между startPrice и endPrice, а их keyword - advert.title: продать Iphone 8 плюс 32 ГБ, белый

Даже если в рекламном заголовке содержится слово iphone, я не хочу получать запросы с идентификатором 2 and 4, посколькуих keywords не полностью совпадают (advert.title не содержит 7 и наушников )

Elasticsearch имеет Percolate Query , которыйдает вам возможность сохранить запрос и выполнить этот запрос для каждого элемента в вашей коллекции.

1 Ответ

0 голосов
/ 23 октября 2018

Если вы хотите сопоставить все ключевые слова в определенной строке, вы можете использовать функцию полнотекстового поиска PostgreSQL , например:

SELECT id, keyword, startPrice, endPrice
FROM searches
WHERE
    startPrice <= 250
    AND endPrice >= 250
    AND to_tsvector('Sell Iphone 8 plus 32GB, white') @@ to_tsquery(array_to_string(string_to_array(keyword, ' '), ' & '));

, что приводит к следующему:

 id |    keyword    | startprice | endprice 
----+---------------+------------+----------
  1 | iphone 8 plus |        100 |      300
  3 | iphone 8      |        200 |      300

Этот запрос будет соответствовать любой строке, содержащей все ключевые слова.Убедитесь, что ключевые слова не могут содержать символы, содержащие совпадающие символы (например,!, &, | И т. Д.).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...