Sphinx 搜索引擎:不同字段的不同 min_prefix_len 值
Sphinx search engine: Different min_prefix_len value for Different fields
在 sphinx 中,我可以设置最小词前缀长度以使用 min_prefix_len 属性 进行索引。
我想为不同的字段设置不同的 min_prefix_len 值。例如,我有一个字段 'Name' 我想设置为 min_prefix_len = 5,另一个字段 'Class' 应该设置为 3。换句话说,我想设置 min_prefix_len 每个字段而不是每个索引。是否可以在 sphinx 搜索引擎配置中执行此操作?
min_prefix_len 只能为每个索引设置,但是如果您不担心花费额外的资源,您可以为整个索引设置 min_prefix_len = 3 然后只控制你的行为如果关键字的长度小于 5,应用将不允许搜索@name。例如:
关键字=abc:
mysql> select * from idx_min where match('@class abc*|@name abc');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.01 sec)
关键字=abcde:
mysql> select * from idx_min where match('@class abc*|@name (abcde|abcde*)');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)
关键字 = ghi:
mysql> select * from idx_min where match('@class ghi*|@name ghi');
Empty set (0.00 sec)
关键字 = ghijk:
mysql> select * from idx_min where match('@class ghi*|@name (ghijk|ghijk*)');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)
即请记住,在这种情况下,您也有前缀 >= 3 个字符用于 @name,并在您的应用程序中添加逻辑以在需要时放置 *。
在 sphinx 中,我可以设置最小词前缀长度以使用 min_prefix_len 属性 进行索引。
我想为不同的字段设置不同的 min_prefix_len 值。例如,我有一个字段 'Name' 我想设置为 min_prefix_len = 5,另一个字段 'Class' 应该设置为 3。换句话说,我想设置 min_prefix_len 每个字段而不是每个索引。是否可以在 sphinx 搜索引擎配置中执行此操作?
min_prefix_len 只能为每个索引设置,但是如果您不担心花费额外的资源,您可以为整个索引设置 min_prefix_len = 3 然后只控制你的行为如果关键字的长度小于 5,应用将不允许搜索@name。例如:
关键字=abc:
mysql> select * from idx_min where match('@class abc*|@name abc');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.01 sec)
关键字=abcde:
mysql> select * from idx_min where match('@class abc*|@name (abcde|abcde*)');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)
关键字 = ghi:
mysql> select * from idx_min where match('@class ghi*|@name ghi');
Empty set (0.00 sec)
关键字 = ghijk:
mysql> select * from idx_min where match('@class ghi*|@name (ghijk|ghijk*)');
+------+--------+--------+
| id | class | name |
+------+--------+--------+
| 1 | abcdef | ghijkl |
+------+--------+--------+
1 row in set (0.00 sec)
即请记住,在这种情况下,您也有前缀 >= 3 个字符用于 @name,并在您的应用程序中添加逻辑以在需要时放置 *。