0

Sphinxにインデックスがありますが、このインデックスの単語の1つは記事番号です。この場合04.007.00964。このようにインデックスをクエリすると、次のようになります。

SELECT * FROM myIndex WHERE MATCH('04.007.00964')

結果が1つありますが、これは予想どおりです。ただし、次のようにクエリすると、次のようになります。

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 に答える