0

我在 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

我做错了什么,或者我不明白什么?

4

1 回答 1

1

因为

min_word_len    = 3

第一个查询将有效:

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

所以简短的词被忽略了。(索引和查询)

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

但是 "*04" 没有被剥离,因为它是 3 个字符,

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

...所以它是单词和中缀长度的不幸组合。可以通过设置 min_word_len = 2 轻松修复它

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

于 2012-04-25T16:25:25.397 回答