我在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
我做错了什么,或者我不理解什么?
答案 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都长)