SphinxQL соответствует эквиваленту MySQL LIKE% searchterm% - PullRequest
0 голосов
/ 03 октября 2018

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

mysql> select count(*) from emails where email like '%johndoe%';
+----------+
| count(*) |
+----------+
|      102 |
+----------+
1 row in set (15.50 sec)

Мои данные проиндексированы в Sphinx (на самом деле Manticore Search) с помощью min_word_len = 1.Теперь, когда я ищу с помощью SphinxQL, я получаю только частичные результаты:

mysql> SELECT count(*) FROM search1 WHERE MATCH('@email johndoe') LIMIT 1000 OPTION max_matches=1000;
+----------+
| count(*) |
+----------+
|       16 |
+----------+
1 row in set (0.00 sec)

Есть идеи, как сопоставить результаты, которые дает мне MySQL?Я пробовал SPH_MATCH_ANY и SPH_MATCH_EXTENDED со сфинксапи, те же результаты.

1 Ответ

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

Я подозреваю, что это в основном из-за совпадения всего слова.Сфинкс соответствует целым словам.С 'словами', определенными согласно charset_table http://sphinxsearch.com/docs/current/conf-charset-table.html

, то есть MATCH('@email johndoe') соответствует только адресам с johndoe в них как word .по умолчанию charset_table сохраняет . - и @ (обычно в электронных письмах!) все как разделители , поэтому будет соответствовать johndoe@domain.com или email@johndoe.com, но НЕ email@myjohndoe.com, индексируемое слово:myjohndoe не johndoe

Принимая во внимание, что mysql 'LIKE' будет счастлив совпадать с частями слова.например, email like '%johndoe%' будет johndoesmith@domain.com, johndoes555@domain.com и 555@johndoes.com или что-то еще.Это чистое совпадение подстроки.


Короче может захотеть подправить charset_table.. - и @ могут быть символами слова, поэтому электронная почта будет целым словом.


альтернативно может просто включить совпадение слова детали с min_infix_len.http://sphinxsearch.com/docs/current.html#conf-min-infix-len

тогда может сделать MATCH('@email *johndoe*'), что даст гораздо более близкие результаты.


в дополнение к min_infix_len будет expand_keywords http://sphinxsearch.com/docs/current.html#conf-expand-keywords

, тогда * символы подстановки будут добавлены автоматически, поэтому можно вернуться к MATCH('@email johndoe')

...