2017-09-05 6 views
0

Elasticsearchを追加「.keyword」でヒットを見つけることは、私は私がanから輸入fluentdログエントリのフルelasticsearch 5インスタンスを照会してひどい時間を過ごしていElasticsearchのみのみ「.keyword」でヒットを見つける

を追加しましたバージョン1.7を実行する古いelasticsearchインスタンス最も簡単なことは木場を通した質問が頻繁にタイムアウトします。潜在的なパフォーマンスの問題を調べるためにどこを探すべきかは完全に暗いです。私はこのようになります問い合わせるてるインデックスのelasticsearchマッピングのサンプリング:代わりにそれと

=> {"@log_name"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"@timestamp"=>{"type"=>"date"}, 
"@version"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"action"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"api"=>{"type"=>"boolean"}, 
"controller"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"db"=>{"type"=>"float"}, 
"duration"=>{"type"=>"float"}, 
"error"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"filtered_params"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
"user"=> 
    {"properties"=> 
    {"email"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "snowflake_id"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "snowflake_uid"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}, 
    "type"=>{"type"=>"text", "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}, 
    ... 

を、私が見つけたドキュメントの合計数を返すためのようなものでcurlを使用してインデックスを照会することができます

0件のドキュメントが見つかりました。私のマッピングは、このデータのために適切であるかどうかはどのように知っていますか:私はuser.email.keyworduser.email用語に置き換える場合しかし、クエリは、私は私の主な質問は推測40

total数を返しますか? (インポートされたデータは、挿入時にデータが挿入されたときに作成されたもので、自動的に作成されると仮定しています)

答えて

2

user.emailフィールドはタイプtextです。このタイプのフィールドにインデックスを付けると、アナライザはソース値を分割して1つ以上の用語に変換します。各用語は、その用語の検索を可能にするために索引に格納されます。マッピングでフィールドのアナライザが指定されていないため、default analyzerが使用されます。デフォルトのアナライザによって用語の出力を表示するには、おそらく結果を見つける用語ユーザーためuser.emailフィールドを検索する、あなたの例に続き

curl -s -XGET http://localhost:9200/logstash-2017.08.15/_analyze -d'{"text": "[email protected]"}' | jq . 

起動します。

user.email.keywordサブフィールドは、タイプkeywordです。このタイプのフィールドは、正確な値でのみ検索可能です。つまり、検索クエリで指定された値は、元のソース値と正確に等しくなければなりません。

+0

ああ、それは信じられないほど役に立つ - 私はESがトークン値だけで検索可能になるようにテキストフィールドを分割することは知らなかった。しかし、私はまだ、なぜ私のすべてのインデックスを照会するのが遅いのですか?つまり、 'curl -s -XGET 'localhost:9200/logstash- *'がタイムアウトし、 'curl -s -XGET' localhost:9200/logstash-2017.09 * 'はありません。具体的な証明はまだありませんが、インポート前とインポート後のドキュメントを集約すると掲載結果に影響が出ているようです。 – matt

関連する問題