在 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

但没有返回任何内容。我怎样才能做到这一点?

您不能对 CRC 使用 'middle' 通配符。 dict=keywords 的原因之一,它可以支持的通配符 much 更灵活。

使用 CRC,它 'precomputes' 所有通配符组合,并将它们作为索引中的单独关键字注入,例如

例如 mickel 作为文档单词,使用 min_prefix_len=1indexer 将创建单词:

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,开始和结束将被索引为单独的词。只需要坚持两者匹配。 (虽然想不出如何让他们自动匹配同一个词!)