Sphinx - объединить оператор OR с модификатором начала / конца поля - PullRequest
0 голосов
/ 01 октября 2018

Правильно ли написано это выражение?Поскольку я не получил все результаты, как ожидалось:

(@nationality_code ("^MD$" | "^GB$" | "^IT$"))

я должен получить всех пользователей с кодом национальности, равным 'MD' или 'GB' или 'IT'

Должно бытькак этот запрос в mysql:

SELECT * FROM users WHERE nationality_code IN ('MD', 'GB', 'IT')

ОБНОВЛЕНИЕ Если я ищу только MD и ГБ, я получаю правильные результаты:

Выполненный запрос:

SELECT id, nationality_code 
FROM jobs_applied_main 
WHERE MATCH('(@nationality_code ("^MD$" | "^GB$"))') AND job_id = '6257' 
LIMIT 0, 999;

enter image description here

Но если я добавлю также «^ IT $», я больше не получу пользователей с национальностью «MD».

enter image description here

Если я удаляю модификатор начала / конца, я получаю ожидаемые результаты, почему такое поведение?

ОБНОВЛЕНИЕ Итак, вот мой индексный дамп и файл sphinx.conf: sphinx-dump

Ответы [ 2 ]

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

Есть проблема со Sphinx 3.0.3 ver, потому что в Sphinx 2.2.11 он работает

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

Да.Выражение верно.Это прекрасно работает для меня:

[snikolaev@dev01 ~]$ mysql -P9314 -h0
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 2.7.1 668faae@180620 dev

Copyright (c) 2009-2017 Percona LLC and/or its affiliates
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select * from idx_min where match('(@nationality_code ("^MD$" | "^GB$" | "^IT$"))');
+------+------------------+------+
| id   | nationality_code | a    |
+------+------------------+------+
|    1 | MD               |  123 |
|    2 | GB               |  123 |
+------+------------------+------+
2 rows in set (0.00 sec)

Убедитесь, что в индексе действительно есть только MD / GB / IT, в котором ничего нет до и после, а min_word_len <2. </p>

...