2

次のようないくつかの文字列があるとします

sphinxQL> select * from rttest where match('beach');
+------+--------+---------------------------------------------+
| id   | weight | value                                       |
+------+--------+---------------------------------------------+
|   12 |   1576 | looking down on the beach from Beach Street |
|   10 |   1555 | This is a beach                             |
|   11 |   1555 | photo of Beach Street                       |
+------+--------+---------------------------------------------+

"beach" を含むが、"Beach Street" フレーズの一部である場合に一致しないドキュメントをどのように一致させることができますか。

この種の作品:

sphinxQL> select * from rttest where match('beach -"beach street"');
+------+--------+-----------------+
| id   | weight | value           |
+------+--------+-----------------+
|   10 |   1527 | This is a beach |
+------+--------+-----------------+

しかし理想的には、ドキュメント 12 も取得する必要があります。独自のビーチもあります。

ビーチストリートからビーチを見下ろす

フレーズを除外するだけでは、単一のキーワードだけに一致するかどうかに関係なく、そのフレーズを含むすべてのドキュメントが除外されます。

「NOT NEAR」のようなものが理想的です。

sphinxQL> select * from rttest where match('beach -NEAR/1 street');
ERROR 1064 (42000): index rttest: syntax error, unexpected TOK_NEAR near 'NEAR/1 street'

しかし、それがないので、他に方法はありますか?(後処理は別として;)

4

1 に答える 1

0

誰かがこれを見つけた場合に備えて、回避策を見つけました。スフィンクス フォーラムに投稿:

http://sphinxsearch.com/forum/view.html?id=9869

でも簡単にまとめると

select *,weight() MOD 4 AS w from from rttest 
  where match('beach | "beach street" | "beach street" | "beach street" ') 
  and w > 0 order by w desc option ranker=wordcount;

+------+---------------------------------------------+------+
| id   | value                                       | w    |
+------+---------------------------------------------+------+
|   10 | This is a beach                             |    1 |
|   12 | looking down on the beach from Beach Street |    1 |
+------+---------------------------------------------+------+

これには「ビーチ」を含むドキュメントが含まれ、「ビーチ ストリート」のみのドキュメントは除外されます

(「ビーチ ストリート」は 4 つの用語すべてに一致するため、4 の倍数は除外されます。単一のビーチがある場合、それ自体で、またはフレーズと共に、正確に 4 ではなく (例: 1 または 5)、まだ含まれています。モジュラス演算の結果は、単一の単語がいくつあるはずです)

于 2013-10-31T20:05:40.463 に答える