クイックなクエリの質問ですが:「"body":""」

トピック作成者:ks-solruserml-bot (2024/06/04 22:54 投稿)
7
CloseClose

(The bot translated the original post https://lists.apache.org/thread/gjbj0td2xj9hdogq80kmfwg2nvtycqnv into Japanese and reposted it under Apache License 2.0. The copyright of posted content is held by the original poster.)

こんにちは、

私のコレクションには空の本文フィールドを持つドキュメントがあります。
"body":""

この「空」の値を持つbodyフィールドのドキュメントを見つけるクエリを探しています。

通常、私はフィルタを使用して実行します。

fq=-body:*

私がクエリを実行している大規模なシャードセットでは、ワイルドカードを使用するとタイムアウトします。小さなセットでは、bodyフィールドが存在しないときに表示されます。

フィルタクエリで値を""で表現する他の試みはうまくいきませんでした。

何かアドバイスはありますか?

ありがとう、
Matthew

返信投稿者:ks-solruserml-bot (2024/06/04 22:54 投稿)

*:* -body:* で検索します。これは私がよく行うことです。

wunder
Walter Underwood
wunder@wunderwood.org
http://observer.wunderwood.org/ (私のブログ)

返信投稿者:ks-solruserml-bot (2024/06/04 22:54 投稿)

この(存在/不在)の状態はインデックス作成時に存在します。したがって、検索時ではなく、インデックス時に最適化を適用してください。

"body"の存在/不在に一致するブール値を作成するカスタムUpdateRequestProcessorチェーンを作成します。

これは、コピー、デフォルト値、および正規表現を使用して行うことができますが、もっと優れた組み合わせがあるかもしれません。目標は、コピーされたフィールドがスキーマに到達するときに、最も効率的なブールフィールド定義に一致するようにすることです。

よろしくお願いします、
Alex

返信投稿者:ks-solruserml-bot (2024/06/04 22:55 投稿)

Walter、Alex、ありがとう!

はい、私は定期的に *:* -body:* で検索しています。マスター/スレーブの展開規模やシャードの数が大きい場合、このワイルドカードクエリがタイムアウトします...私はスコープを絞るためにいくつかの追加のfqを追加する予定です。

インデックスプロセス/スキーマを変更する即時のオプションはありませんが、それは良いアイデアですね、Alex。

Matthew

返信投稿者:ks-solruserml-bot (2024/06/04 22:55 投稿)

スキーマにブール型のドキュメント値を追加することで、新しいフラグを持たないドキュメントに対してバッチチェックを実行し、その情報を後から追加することができるかもしれません。そして、その情報を0/1で設定して本文を示します。インプレースの更新は、データをゼロから再インデックスする必要がないため、この方法が適用されるでしょう。

これは単に同じ「ブール型にする」目標に別の方法を考え出しているだけで、試したことはありません。

よろしくお願いします、
Alex

返信投稿者:ks-solruserml-bot (2024/06/04 22:55 投稿)

その構文は、本文フィールドが完全に欠落しているドキュメントを見つけるのには機能しますが、最良のオプションではありません。おそらく、この構文の方がはるかに高速で、同じ結果が返されるでしょう。

*:* -body:[* TO *]

それが速い理由は、*単体だけではワイルドカードクエリであり、そのフィールドの基数が非常に低い場合を除いて、それらは非常に効率が悪いからです。十分に大きなインデックスの場合、"body"という名前のフィールドの基数は何百万または何十億になると予想されます。

これらのクエリのいずれも、値が空の文字列のドキュメントを見つけることはできません。なぜなら、私はそれがワイルドカードクエリまたは範囲クエリで一致すると考えているからです。

ありがとうございます、
Shawn

返信投稿者:ks-solruserml-bot (2024/06/04 22:55 投稿)

もし 'body' フィールドが indexed=true の場合、Shawnのクエリは、body= "" および body フィールドが存在しない場合の結果を提供します。
また、私も 'body' フィールドは高基数フィールドであると思われるので、body:[\* TO \*] のフォーマットがはるかに速いことに同意します。

Rahul

返信投稿者:ks-solruserml-bot (2024/06/04 22:55 投稿)

訂正:もし "body" フィールドが indexed=true かつ analyzed (つまり、一部のテキストタイプであり、"string" タイプではない場合) の場合。

トピックへ返信するには、ログインが必要です。

KandaSearch

Copyright © 2006-2024 RONDHUIT Co, Ltd. All Rights Reserved.

投稿の削除

この投稿を削除します。よろしいですか?