У меня есть индекс в реальном времени, содержащий информацию о людях (определение приводится ниже). Проблема в том, что я пытаюсь выполнить точное совпадение по номеру телефона и адресу электронной почты, и независимо от того, что я пытаюсь, я получаю совпадения, даже если значения столбца базы данных содержат то, что я искал, а не где столбец значение точно соответствует.
Я использую следующий запрос:
SELECT id, first_name,last_name,email_personal, phone_number, WEIGHT() as relevance FROM people WHERE MATCH('@(phone_number,email_personal) "^+447111$" "^myemail@gmail\.com$ "');
Возвращает строки, содержащие полный номер телефона (т.е. +44711122334), насколько я понимаю, не должен значит, он должен пытаться сопоставить «^ + 447111 $» в качестве начала и конца поля?
Я также пробовал этот тестовый запрос, и у меня возникла та же проблема, за исключением того факта, что возвращает намного больше совпадений, так как он будет соответствовать любому значению поля, содержащему критерии, а не всему значению поля. Значения не являются полными значениями, которые я ищу, но это тест, поскольку он должен соответствовать строкам, которые имеют только номер телефона "+447711" и адрес электронной почты "@ gmail.com", которые не существует в базе данных, но она возвращает строки, где номер телефона начинается с +447711, а в электронном письме содержится @ gmail.com.
SELECT id, first_name,last_name,email_personal,phone_number, WEIGHT() as relevance FROM people WHERE MATCH('@phone_number "^+447711$" @email_personal "^@gmail\.co$"') ORDER BY relevance DESC;
Просто для подтверждения я пытаюсь найти совпадения где значения полей соответствуют точному тексту, то есть это будет запрос SQL (и да, это тоже не работает!)
SELECT id,first_name,last_name,email_personal,phone_number FROM people WHERE phone_number = '+44711122334' AND email_personal = 'myemail@gmail.com';
Config:
index people
{
type = rt
path = /var/local/sphinx/indexes/ppl/
rt_field = first_name
rt_field = last_name
rt_field = phone_number
rt_field = email_personal
stored_fields = first_name,last_name,phone_number,email_personal
rt_mem_limit = 512M
expand_keywords = 1
min_prefix_len = 2
min_word_len = 2
index_exact_words = 1
}