2016-07-07 21 views
0

私が取り組んでいるプロジェクトにelasticsearchセットアップを使用しようとしています。私は誰かが見たいところの正しい方向に手を差し伸べることができるかどうか疑問に思っていませんでした。私は1億以上のレコードでインデックスを使用しています。
私は、次のようなクエリをワイルドカードできるようにする必要がある場合:エラスティック検索からワイルドカード検索の電子メールアドレス?

b*[email protected] 
b*[email protected]*.com 
*[email protected] 
br*gu*@gmail.com 
*g*@* 

私はワイルドカードや他の検索を使用しようとすると、私は完全に予想される結果を得ることはありません。

私はelasticsearchを使用してどのような検索を行うべきですか? ElasticSearchは、使用する正しいツールでもありますか?私がこれを引き出しているソースはMySQLです。そうでなければ、私はSphinxやSolrの使用を検討するかもしれません。

+0

メール検索では、この方法をお勧めします。http://stackoverflow.com/questions/30115867/elasticsearch-analyzer-and-tokenizer-for-emails –

答えて

2

hereのようにワイルドカードクエリを試したことが前提です。

しかし、あなたの電子メールが分析されていない場合と分析されていない場合は、動作が大きく異なります。私はあなたのインデックスを削除し、マッピングを変更することをお勧めします。例えば

PUT /emails 
{ 
    "mappings": { 
     "email": { 
      "properties": { 
       "email": { 
       "type": "string", 
       "index": "not_analyzed" 
      } 
     } 
    } 
    } 
} 

これを取得したら、通常のワイルドカードクエリまたはquery_stringを実行できます。例えば余談として、

GET emails/_search 
{ 
    "query": { 
    "wildcard": { 
     "email": { 
     "value": "s*com" 
     } 
    } 
    } 
} 

あなたはnot_analyzedとしてそれを設定せずに、単にインデックス電子メール、デフォルトのマッピングは、実際のドメインからのメールのプレフィックスを分割し、あなたはSを行う際の結果を得ることはありませんなぜそれがです* @ gmail.com。 s *または* gmail.comの結果は引き続き得られますが、not_analyzedを使用して正しく動作します。大文字と小文字の区別をサポートしたい場合は、hereのようにuax_url_emailトークナイザを使用するカスタムアナライザを調べるとよいでしょう。

関連する問題