как искать книги, когда пользователь может искать неполные имена или делать орфографические ошибки в Postgresql - PullRequest
0 голосов
/ 04 июля 2019

Я предоставляю интернет-поиск пользователям книжного магазина.Пользователь может ввести название книги, автора или ISBN в одном поле.В поиске возникают проблемы, например, поиск не выполняется, если в названии (названии книги) указано неправильное написание. Например, при поиске по запросу «Люди Америки» будет выполнен поиск без ошибок, но «Люди Америки», «Люди Амреки» или «Люди»Америка "не даст мне точных результатов.

Я вызываю запросы через Java-приложение Spring Boot и, как хакер, делаю это в 3 этапа.Если первый запрос имеет 0 результатов, то я перехожу на второй, а если второй имеет 0 результатов, то я перехожу на третий.

Я пробовал такие вещи, как сопоставление с образцом и pg_trgm (триграммы Postgres), но так и не получилось.Любая помощь будет высоко оценена.

Первый запрос:

    select distinct * from (select title, author, publisher, isbn, edition, 
      book_type, binding, price, image_isbn, special_price, 
      weight,currency_conversion.currency_name, 
      currency_conversion.abbreviation, currency_conversion.conversion_rate 
   from books inner join currency_conversion on currency_conversion.id = 
   books.currency_id where title ILIKE 'People of America' or isbn ILIKE 
   'People of America' or author ILIKE 'People of America') as ab;

Второй запрос:

   select distinct * from (select title, author, publisher, isbn, edition, 
   book_type, binding, price, image_isbn, 
    special_price, weight,currency_conversion.currency_name, 
currency_conversion.abbreviation, currency_conversion.conversion_rate from books 
  inner join currency_conversion 
  on currency_conversion.id = books.currency_id where title ilike '%People of America%' or isbn ILIKE '%People of America%' or author ilike '%People of America%') as ab 

Третий запрос:

select distinct * from (select title, author, publisher, isbn, edition, book_type, binding, price, image_isbn, special_price, 
weight,currency_conversion.currency_name, currency_conversion.abbreviation, currency_conversion.conversion_rate from books inner join currency_conversion 
on currency_conversion.id = books.currency_id where title % 'People of America' or title ilike '%People of America%' 
or isbn ILIKE 'People of America' or author % 'People of America') as ab

1 Ответ

0 голосов
/ 05 июля 2019

Вы пытались использовать функцию word_simility модулей pg_trgm?

select word_similarity('The People of The America', 'People America');

result:
0.681818

вы можете установить порог сходства, например:> 0,5

или вы должны увидеть опцию FTS https://www.postgresql.org/docs/10/textsearch.html

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