0

Sphinx のドキュメントには、SphinxQL の使用に関する簡単な例があります。

SELECT * FROM test WHERE MATCH('@title hello @body world')

idsコンマなどで区切られた整数値を含むvarchar 列をというテーブルに追加するとします。例えば:

-------------------------------
| title | body  | ids         |
-------------------------------
| hello | world | 5,251,87580 |
-------------------------------

特定の ID を含む行のみを選択するように上記のクエリ例を修正したい場合は、次のように簡単に変更できると思います。

SELECT * FROM test WHERE MATCH('@title hello @body world @ids 251')

右?

しかし、私がやりたいことは、列に特定の ID を含まないids行を実際に返すことです。これは可能ですか?

編集:

「ブール式」の下で見つけたSphinxQLドキュメントから分岐するか、正確なフレーズ(またはこの場合は数字)を引用符で囲んでマイナス記号を入れるだけでよいので、答えを見つけたと思いましたフロント。

したがって、クエリの例は次のようになります。

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')

うまくいくと思ったが、うまくいかない。

一致させたくない ID を から に変更251する11と、テーブルに次の列が存在します。

-------------------------------
| title | body  | ids         |
-------------------------------
| hello | world | 5,111,87580 |
-------------------------------

次に、このクエリ:

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"11"')

Sphinx は明らかに "111" 内の "11" に一致するため、その行は返されません。

私のconf設定があります:

index_field_lengths = 1
morphology          = stem_en
min_word_len        = 1
min_prefix_len      = 1
prefix_fields       = name
expand_keywords     = 1
4

1 に答える 1

0

私はSphinxQLのドキュメントから分岐し、「ブール式」または同様のものの下で、正確なフレーズ(またはこの場合は数字)を引用符で囲み、マイナス記号を前に置くことができることを見つけました。

したがって、クエリの例は次のようになります。

SELECT * FROM test WHERE MATCH('@title hello @body world @ids -"251"')

私はそれをテストしました、そしてそれはうまくいくようです!

他の誰かが役に立つと思うかもしれない場合に備えて、ここに質問を残しておくと思います:-)

于 2015-03-24T20:56:00.380 に答える