SphinxQL 匹配 MySQL LIKE %searchterm%
SphinxQL match equivalent of MySQL LIKE %searchterm%
在我的 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 给我吗?我用 sphinxapi 尝试了 SPH_MATCH_ANY
和 SPH_MATCH_EXTENDED
,结果相同。
我怀疑这主要是由于整个单词匹配。 Sphinx 匹配整个单词。
根据 charset_table http://sphinxsearch.com/docs/current/conf-charset-table.html
定义 'words'
ie 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')
在我的 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 给我吗?我用 sphinxapi 尝试了 SPH_MATCH_ANY
和 SPH_MATCH_EXTENDED
,结果相同。
我怀疑这主要是由于整个单词匹配。 Sphinx 匹配整个单词。 根据 charset_table http://sphinxsearch.com/docs/current/conf-charset-table.html
定义 'words'ie 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')