我使用带有CRC模式和min_infix_length=1的sphinx,并且我希望在关键字的字符之间使用通配符搜索。假设我的索引文件中有这样的数据:
name
-------
mickel
mick
mickol
mickil
micknil
nickol
nickal
当我搜索所有记录时,他们的名字以"mick"开头,以"l"结尾:
select * from all where match ('mick*l')
我预计结果应该是这样的:
name
-------
mickel
mickol
mickil
micknil
但什么也没回。我该怎么做?
我知道我可以在dict=keywords模式下这样做,但出于某些原因,我应该使用crc模式。
我还使用了"^"one_answers"$"运算符,但没有成功。
不能将'middle'通配符与CRC一起使用。dict=keywords的一个reaons,它可以支持的通配符更加灵活。
使用CRC,它"预计算"所有通配符组合,并将它们作为单独的关键字注入索引中,例如
例如mickel
作为文档单词,使用min_prefix_len=1
,indexer
将创建单词:
mickel
mickel*
micke*
mick*
mic*
mi*
m*
作为索引中的单词,因此所有组合都可以匹配。如果使用min_infix_len
,它还必须在开始时进行所有组合(因此(word_length)^2 + 1
组合(
如果它必须在中间预先计算通配符的所有组合,那就要多得多了。特别是如果允许所有中间AND开始/结束组合(
尽管如此,您可以重写
select * from all where match ('mick*l')
作为
select * from all where match ('mick* *l')
因为使用min_infixlen,开始和结束将作为sperate单词进行索引。只是需要坚持两者都匹配。(尽管不知道如何让他们机器人匹配同一个单词!(