2012-04-25 64 views
0

我在獅身人面像中有一個索引,這個索引中的一個單詞是一個文章編號。在這種情況下,04.007.00964。 當我詢問我的指標是這樣的:獅身人面像(通過SphinxQL)匹配時沒有星號,但沒有星號

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釋放

我在做什麼錯了,還是什麼不我明白了?

回答

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都長)

+0

但是04.007.00964應該看作一個單詞,因爲這是我的貨號 – 2012-04-25 16:42:57

+2

它不會是。 「。」是一個分隔符。它可以通過charset_tables進行更改 - 您的配置中沒有一個,因此您使用默認表格,其中有「。」作爲分隔符。 – barryhunter 2012-04-25 16:44:19

+0

感謝這項工作,我添加了'。'到charset_table。也許你可以編輯你的答案,我可以將其標記爲答案。 – 2012-04-25 16:59:55