2

私はSolr(SolrCloud)を使用して、ツイートのインデックス作成と検索を行っています。ツイート数は約1600万件で、インデックスサイズは約3GBです。ツイートはリアルタイムでインデックスに登録されるため、リアルタイム検索が可能になります。現在lowercase、ツイートの本文フィールドにはフィールドタイプを使用しています。検索内の単一の検索用語の場合、約7秒かかり、各検索用語を追加すると、検索にかかる時間は直線的に増加します。3GBは、solrプロセスに割り当てられる最大RAMです。サンプルのSolr検索クエリは次のようになります

tweet_body:*big* AND tweet_body:*data* AND tweet_tag:big_data

検索速度を向上させるための提案はありますか?現在、ツイートコレクション全体を含むシャードを1つだけ実行しています。

4

2 に答える 2

3

クエリのtweet_body:*big*パフォーマンスが低下することが予想されます。末尾のワイルドカードは簡単です。先頭のワイルドカードは、ReversedWildcardFilterFactoryを使用して簡単に処理できます。ただし、どちらも、インデックスを使用して一致するドキュメントを見つけるのではなく、すべてのドキュメントをスキャンする必要があります。2つのアプローチを組み合わせると、次の検索のみが可能になります。

tweet_body:*big tweet_body:big*

これは同じことではありません。先頭と末尾のワイルドカードを使用して用語を本当に検索する必要がある場合は、データをNグラムとしてインデックス化することを検討することをお勧めします。


以前は気づいていませんでしたが、lowercaseフィールドタイプは小文字でフィルタリングされたKeywordAnalyzerのようです。これはあなたが望むものではありません。つまり、フィールド全体が単一のトークンとして扱われます。識別番号などには適していますが、全文検索を実行するテキストの本文には適していません。

そうです、あなたはそれを変える必要があります。 text_generalおそらく適切です。これにより、正しくトークン化されたフィールドにインデックスが付けられ、探しているクエリを実行できるようになります。

tweet_body:big AND tweet_body:data AND tweet_tag:big_data

インデックスを再作成する必要がありますが、それを回避することはできません。キーワードフィールドで全文検索を実行するための優れたパフォーマンスの高い方法はありません。

于 2012-12-19T23:56:49.067 に答える
0

フィルタクエリは並行して実行されるため、フィルタクエリを使用してみてください

于 2013-10-28T10:00:26.813 に答える