0

データベースに何らかの電子メールを持っているすべてのユーザーを探しています。

'user' :
            {         
             'properties': 
                {
                    'user_name': { 'type': 'string', 'index' : 'not_analyzed' }, 
                    'about': { 'type': 'object' },
                }
            }

about フィールドは JSON オブジェクトで、次のようになります。

{"nickname":"bobby McBob", "contact":"bobmcbob@gmail.com", "hobbies":"tennis"}

しかし、決まった構造はありません。

パターン@ .com に適合する方法で、文字列を持つすべてのユーザーを検索したいと思います。これにより、電子メールを持つすべてのユーザーが返されることを期待しています。

どうすればそれを行うことができますか?

次のような gmail を検索するための単純なクエリでさえ、

curl -X GET 'http://localhost:9200/index_name/user/_search' -d '{"query":{"match":{"_all":"gmail.com"}}}'

動作しません。たぶん、インデックス作成時に別のアナライザーでオブジェクト「について」を分析する必要がありましたか? それを分離/トークン化するには?

おそらく別のクエリを使用する必要がありますか?

どうすればそれを行うことができますか?

4

1 に答える 1

0

を使用pattern tokenizerしてパターンをキャプチャし、abc.comフィールドのアナライザーで使用できますabout( analyzer_emaildomain)。例えば:

"analysis":{
        "analyzer":{
          "analyzer_emaildomain": {
                    "tokenizer": "emaildomain_tokenizer"
           }
        },
         "tokenizer" : {
            "emaildomain_tokenizer" : {
                "type": "pattern",
                "pattern" : "\\b[a-zA-Z0-9._%+-]+@([a-zA-Z0-9.-]+\\.com)\\b",
                "group":1
            }
        }
}

設定で確認できます。グループ #1 をキャプチャしました。これは、 の後@と で終わる任意のアルファベット文字であり、ケースに合わせて.comキャプチャgmail.comされます。パターン トークナイザーの詳細については、http: //www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis-pattern-tokenizer.html を参照してください。

于 2014-05-19T08:20:08.553 に答える