Solrクエリサニタイザについて

トピック作成者:ks-solruserml-bot (2024/10/07 17:08 投稿)
7
OpenOpen

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

こんにちは、

私たちのウェブサイトには検索ボックスがあり、その内容が特に調整されることなくSolrに渡されます。これが99%の時間は問題なく動作するのですが、残りの1%は不正な動作をするボットが入り込み、様々な不正なデータを詰め込もうとします。

その結果、悪いことが起こります。Javaの非常に冗長な例外スタックトレースがディスクをログのローテーションよりも速く埋め尽くし、CPU負荷が急上昇するなどの問題が発生します。

そこで質問です。Solrにクエリを渡す前に、クエリの用語をクリーンアップするためのバリデータやサニタイザをご存知の方はいらっしゃいますか?Googleで調べても見つけられませんでした。

ありがとうございます
Dima

返信投稿者:ks-solruserml-bot (2024/10/07 17:08 投稿)

Solarium(Solr用のPHPクライアント)には、特殊文字をエスケープするために正規表現を使用する検索用語をエスケープするためのヘルパーメソッドがあります。

リンクはこちらです:
https://github.com/solariumphp/solarium/blob/c2744ff706a2f0be148a45d702700fc346429679/src/Core/Query/Helper.php#L82

Thomas

返信投稿者:ks-solruserml-bot (2024/10/07 17:09 投稿)

こんにちは、Dima

クエリパーサーについては言及がありませんでしたが、こちらのSimple Query Parserが適しているかもしれません。スタックトレースに関しては、ログ設定で無効にできると思います。Solrがまだlog4j2を使用している場合、log4j2のドキュメントをご確認ください。

--
よろしくお願いします、
Mikhail Khludnev

返信投稿者:ks-solruserml-bot (2024/10/07 17:09 投稿)

私は、パフォーマンス問題を回避するために3種類のチェックと修正を行っています。

  1. 深いページングを防ぐ:これは毎回行う必要があります。50ページ目を超えるリクエストが来た場合、それを50ページ目に書き換えます。

  2. クエリのサイズを制限する:宿題の手伝いをしていたとき、800語のクエリを貼り付ける人がいました。それらは40語に切り詰められます。実際の数千のユーザークエリをテストしたところ、40語と80語で結果はほぼ同じでした。Googleも32語しか許可していません。

  3. すべての構文文字を削除(またはスペースに置換):これは少し難しい作業です。たとえば、「-」は単語の中では許容されます。より保守的なアプローチは、「*」や「?」を削除することで、"a b c d e f"のようなスクリプトキディーのクエリを防ぎます。

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

返信投稿者:ks-solruserml-bot (2024/10/07 17:09 投稿)

皆さん、ありがとうございます。

#3については、Thomasが提案してくれたSolariumの正規表現を使おうと思います。#1と#2は現時点では問題ではありませんが、ついでに追加しておく価値はあります。

Mishaの提案通りにログ設定を再構成することには少し懐疑的です。ディスクスペースは節約できますが、例外そのものは依然として存在し、それに伴うオーバーヘッドも残ります。とはいえ、ディスクは一番安価な部分です。

そして、私たちは標準のクエリパーサーを使用しています。例えばedismaxへの切り替えは検討に値しますが、それには大量のリグレッションテストが必要で、テストする箇所を見つけることから始めるため、かなり大きなプロジェクトになります。

改めて、ありがとうございました。

Dima

返信投稿者:ks-solruserml-bot (2024/10/07 17:09 投稿)

正直なところ、ここには欠けている機能があります。Solrにはフリーテキストクエリパーサーがあるべきです。クエリを標準トークナイザーで処理し、すべての構文を無視して、複数の単語やフレーズのクエリを生成する機能です。

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

返信投稿者:ks-solruserml-bot (2024/10/07 17:09 投稿)

私は数年前にこの小さなプラグインを書きました:https://github.com/cominvent/request-sanitizer-component
リクエストを行うクライアントを制御できない場合には役立つでしょう。クライアントを制御できるのであれば、そこで何らかのサニタイズ処理を追加することをお勧めします。

Jan

返信投稿者:ks-solruserml-bot (2024/10/07 17:10 投稿)

https://github.com/mkhludnev/solr-flexible-qparser は、クエリの前処理に完全な制御を提供するかもしれません。

--
よろしくお願いします、
Mikhail Khludnev

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

KandaSearch

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

投稿の削除

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