Sphinx(通过SphinxQL)匹配没有星号,但没有星号

时间:2012-04-25 06:43:03

标签: search-engine sphinx wildcard

我在Sphinx中有一个索引,这个索引中的一个词是文章编号。在这种情况下04.007.00964。 当我像这样查询我的索引时:

SELECT * FROM myIndex WHERE MATCH('04.007.00964')

我有一个结果,这是预期的。 但是,当我这样查询时:

SELECT * FROM myIndex WHERE MATCH('*04.007.00964*')

我的结果为零。

我的索引配置是:

index myIndex
{
    source          = myIndex
    path            = D:\Tools\Sphinx\data\myIndex
    morphology      = none
    min_word_len    = 3
    min_prefix_len  = 0
    min_infix_len   = 2
    enable_star     = 1
}

我正在使用v2.0.4-release

我做错了什么,或者我不理解什么?

1 个答案:

答案 0 :(得分:1)

因为

min_word_len    = 3

第一个查询将是有效的:

SELECT * FROM myIndex WHERE MATCH('007 00964')

这么短的单词被忽略了。 (索引和查询)

编辑添加:和“。”不在默认的charset_table中,这就是它用作分隔符的原因。

然而,“* 04”未被剥离,因为它有3个字符,

但是没有什么可以匹配,因为“04”不会在索引中(它比min_word_len短)

...所以它是单词和中缀长度的不幸组合。可以通过制作min_word_len = 2

轻松修复它

编辑添加:或添加'。'到charset表,以便它不再用于分隔单词,因此使用整个文章编号 - 并且比min_word_len和min_infix_len都长)