0

Sphinxから Crateへの移行を考えていますが、全文クエリ構文に関するドキュメントが見つかりません。Sphinx では、以下を検索できます。

("black cat" -catalog) | (awesome creature)

これは、ドキュメント内の正確なフレーズ「black cat」で「catalog」という用語がない、またはドキュメント内の任意の位置にある「awesome」と「creative」の両方を表します

black << big << cat

これには、ドキュメントに「black」、「big」、および「cat」のすべての用語が含まれている必要があり、「black」の一致位置が「big」の一致位置よりも小さいことなども必要です。

そして、ドキュメント内の特定の場所を検索する必要があります。スフィンクスでは、次のように近接演算子を使用できました

hello NEAR/10 (mother|father -dear)

これには、ドキュメントに「こんにちは」という用語と「母」または「父」という用語を含める必要があり、「こんにちは」から最大で 10 語離れている必要があります。

NEAR を使用した最後の構造は、私のアプリケーションで頻繁に使用されます。クレートですべて可能ですか?

4

1 に答える 1

0

残念ながら、Sphinx との比較についてコメントすることはできませんが、あなたの質問に固執します :)

Crate の全文検索には、SQL と Lucene のマッチング機能が備わっているため、複雑なクエリを処理できるはずです。出力に一致するクエリを提供するだけです。かなり読みやすいと思います。

(「黒猫」-カタログ) | (すごい生き物)

select * 
from mytable 
where 
  (match(indexed_column, 'black cat')  using phrase 
     and not match(indexed_column, 'catalog')) 
  or match(indexed_column, 'awesome creature') using best_fields with (operator='and');

黒《大》《猫》

select * 
from mytable 
where 
  match(indexed_column, 'black big cat') using phrase with (slob=100000);

これはトリッキーです。Sphinx とまったく同じことを行う演算子はないようですが、「slop」値で調整できます。ユースケースによっては、別の(より良い)解決策もあるかもしれません...

こんにちはNEAR / 10(母|父-親愛なる)

select * 
from mytable 
where 
  (match(indexed_column, 'hello mother')  using phrase with (slop=10)
     or match(indexed_column, 'hello father') using phrase with (slop = 10))
  and not match(indexed_column, 'hello dear') using phrase with (slop = 10)

Sphinx の言語と比べると少し不格好に見えるかもしれませんが、問題なく動作します :)

パフォーマンスに関しては、Lucene のおかげで、依然として超高速である必要があります。

乾杯、クラウス

于 2016-09-15T15:49:49.073 に答える