在 Sphinx 中使用 CRC 模式在单词之间进行通配符搜索
Wildcard searching between words with CRC mode in Sphinx
我使用带有 CRC 模式的 sphinx 和 min_infix_length = 1,我想在关键字的字符之间使用通配符搜索。假设我的索引文件中有一些这样的数据:
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 模式。
我也用了'^'和'$'运算符,但没有用。
您不能对 CRC 使用 'middle' 通配符。 dict=keywords 的原因之一,它可以支持的通配符 much 更灵活。
使用 CRC,它 'precomputes' 所有通配符组合,并将它们作为索引中的单独关键字注入,例如
例如 mickel
作为文档单词,使用 min_prefix_len=1
、indexer
将创建单词:
mickel
mickel*
micke*
mick*
mic*
mi*
m*
...作为索引中的单词,因此所有组合都可以匹配。如果使用 min_infix_len
,它也必须在开始时进行所有组合(所以 (word_length)^2 + 1
组合)
...如果它必须预先计算中间通配符的所有组合,又会多很多。特别是 if then 也允许所有中间 AND start/end 组合)
话虽如此,你可以重写
select * from all where match ('mick*l')
作为
select * from all where match ('mick* *l')
因为 min_infix_len,开始和结束将被索引为单独的词。只需要坚持两者匹配。 (虽然想不出如何让他们自动匹配同一个词!)
我使用带有 CRC 模式的 sphinx 和 min_infix_length = 1,我想在关键字的字符之间使用通配符搜索。假设我的索引文件中有一些这样的数据:
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 模式。
我也用了'^'和'$'运算符,但没有用。
您不能对 CRC 使用 'middle' 通配符。 dict=keywords 的原因之一,它可以支持的通配符 much 更灵活。
使用 CRC,它 'precomputes' 所有通配符组合,并将它们作为索引中的单独关键字注入,例如
例如 mickel
作为文档单词,使用 min_prefix_len=1
、indexer
将创建单词:
mickel
mickel*
micke*
mick*
mic*
mi*
m*
...作为索引中的单词,因此所有组合都可以匹配。如果使用 min_infix_len
,它也必须在开始时进行所有组合(所以 (word_length)^2 + 1
组合)
...如果它必须预先计算中间通配符的所有组合,又会多很多。特别是 if then 也允许所有中间 AND start/end 组合)
话虽如此,你可以重写
select * from all where match ('mick*l')
作为
select * from all where match ('mick* *l')
因为 min_infix_len,开始和结束将被索引为单独的词。只需要坚持两者匹配。 (虽然想不出如何让他们自动匹配同一个词!)