MATCH AGAINST получить результаты, соответствующие нескольким словам в правильном порядке - PullRequest
0 голосов
/ 27 октября 2018

У меня есть таблица, в которой есть terms, эти термины фактически являются возможными поисковыми входами, добавленными пользователями, выглядит примерно так:

| id  | name          | remote_id  | type       |
| --- | ------------- | ---------- | ---------- |
| 1   | Audi          | 3453       | category   |
| 2   | Audi RS       | 52434      | model      |
| 3   | Las Vegas     | 30         | city       |
| 4   | 1994          | 10         | production |
| 5   | Audi for sale | 3454       | category   |
| 6   | Audi for rent | 3455       | category   |

Я хочу создать простой метод, позволяющий пользователю получить хороший результат поиска для этого вида ввода:

Audi for sale 1994 in Las Vegas

Я хочу получить минимальный результат из таблицы, которая соответствует входным предложениям, мой требуемый результат:

1- Audi for sale
2- 1994
3- Las Vegas

Но я не смог получить этот результат, поскольку то, что я пробовал, использует:

"SELECT DISTINCT * FROM `terms` WHERE MATCH (name) AGAINST ('Audi for sale 1994 in Las Vegas' IN BOOLEAN MODE)"

Но потом я получил результаты, которые мне не нужны, например Audi, Audi RS, Audi for rent.

В соответствии с тем, что я прочитал здесь , я попытался разбить входное предложение следующим образом и, добавив + перед каждым словом, затем выполнить поиск, пытаясь найти их все:

+Audi
+Audi +for
+Audi +for +sale
+Audi +for +sale +1994
+Audi +for +sale +1994 +in
+Audi +for +sale +1994 +in +Las
+Audi +for +sale +1994 +in +Las +Vegas

Я попытался, чтобы гарантировать порядок слов, совпадающий с записями в моей таблице:

SELECT DISTINCT * FROM `terms` WHERE MATCH (name) AGAINST ('(+Audi) (+Audi +for) (+Audi +for +sale) (+Audi +for +sale +1994) .....' IN BOOLEAN MODE) 

Но тогда это также привело к потере некоторых ожидаемых результатов, таких как 1994 и Las Vegas.

Я надеюсь, что смогу объяснить, чего я пытаюсь достичь, спасибо.

EDIT

Позвольте мне быть более ясным и добавить некоторые подробности, суть в том, чтобы пользователи не использовали FILTERS на моем веб-сайте для поиска автомобилей, например, вместо того, чтобы выбрать Audi, затем выбрать «RS», затем выбрать «Las Vegas» и год выпуска "1994", я хочу, чтобы пользователь мог искать Audi for sale 1994 in Las Vegas в одном текстовом поле, и необходимо выполнить фильтрацию в бэкэнде, чтобы отделить и классифицировать правильные категории и параметры для использования в процессе поиска .

Если бы я мог определить, что «Audi for sale» - это category, «1994» - это production, а «Лас-Вегас» - это city, тогда я могу просто создать запрос, который может получить правильный результат для пользователя без него, чтобы отфильтровать вручную.

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