1

ES に保存したいくつかのログに対してファセット クエリを実行しようとしています。ログは次のようになります

{"severity": "informational","message_hash_value": "00016B15", "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1", "host": "192.168.8.225", "version": "1.0", "user": "User_1@test.co", "created_timestamp": "2013-03-01T15:34:00", "message": "User viewed contents", "inserted_timestamp": "2013-03-01T15:34:00"}

私が実行しようとしているクエリは

curl -XGET 'http://127.0.0.1:9200/logs-*/logs/_search' 
-d {"from":0, "size":0, 
    "facets" : { 
         "user" : { 
            "terms" : {"field" : "user", "size" : 999999 } } } }

ログのフィールド"user"は電子メール アドレスであることに注意してください。今問題は、terms-facet私が使用する検索クエリが、以下に示すようにユーザーフィールドから用語のリストを返すことです。

u'facets': {u'user': {u'_type': u'terms', u'total': 2004, u'terms': [{u'count': 1002,u'term': u'test.co'}, {u'count': 320, u'term': u'user_1'}, {u'count': 295,u'term': u'user_2'}

そのリストには、term

{u'count': 1002,u'term': u'test.co'}

これは、ユーザーの電子メール アドレスのドメイン名です。なぜelasticsearchはドメインを別の用語として扱っているのですか?

クエリを実行してマッピングを確認する

curl -XGET 'http://127.0.0.1:9200/logs-*/_mapping?pretty=true'

"user"フィールドに対して次の結果が得られます

"user" : {
      "type" : "string"
    },
4

1 に答える 1

2

これは、elasticsearch のデフォルトのグローバル アナライザーがインデックス時に (空白や句読点などに加えて) "@" をトークン化するために発生します。この問題は、elasticsearch にこのフィールドでアナライザーを実行しないように指示することで回避できますが、すべてのデータのインデックスを再作成する必要があります。

新しいインデックスを作成する

curl -XPUT 'http://localhost:9200/logs-new'

この新しいインデックスのマッピングで、「ユーザー」フィールドを分析しないことを指定します

curl -XPUT 'http://localhost:9200/logs-new/logs/_mapping' -d '{
    "logs" : {
        "properties" : {
            "user" : {
                "type" : "string", 
                "index" : "not_analyzed"
            }
        }
    }
}'

ドキュメントにインデックスを付ける

curl -XPOST 'http://localhost:9200/logs-new/logs' -d '{
    "created_timestamp": "2013-03-01T15:34:00", 
    "host": "192.168.8.225", 
    "inserted_timestamp": "2013-03-01T15:34:00", 
    "message": "User viewed contents", 
    "message_hash_value": "00016B15", 
    "severity": "informational", 
    "user": "User_1@test.co", 
    "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1", 
    "version": "1.0"
}'

elasticsearch ファセットにメールアドレス全体が表示されるようになりました

curl -XGET 'http://localhost:9200/logs-new/logs/_search?pretty' -d '{
    "from":0, 
    "size":0, 
    "facets" : { 
         "user" : { 
            "terms" : {
                "field" : "user", 
                "size" : 999999 
            }
        } 
    }
}'

結果:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ ]
  },
  "facets" : {
    "user" : {
      "_type" : "terms",
      "missing" : 0,
      "total" : 1,
      "other" : 0,
      "terms" : [ {
        "term" : "User_1@test.co",
        "count" : 1
      } ]
    }
  }
}

参照: コア タイプ: http://www.elasticsearch.org/guide/reference/mapping/core-types/ 新しいマッピングによる再インデックス: https://groups.google.com/forum/?fromgroups#!topic/elasticsearch /tCaXgjfUFVU

于 2013-04-04T18:37:34.300 に答える