3

MAC アドレス フィールドを含むタイプがあります。データはjdbc Riverを使用してもたらされます

原因は、mac_address フィールドで用語集計を実行すると、フィールドがインデックス付きキーに分割されているように見えるためです。

アクション:

GET index/type/_search?search_type=count
{
    "aggs" : { 
        "uniqe_macs" : { 
            "terms" : {
              "field" : "mac_address" 
            }
        }
    }
}

結果:

  "aggregations": {
     "uniqe_visitors": {
        "buckets": [
           {
              "key": "00",
              "doc_count": 1608759
           },
           {
              "key": "10",
              "doc_count": 674633
           },
           {
              "key": "18",
              "doc_count": 588591
           },
           {
              "key": "f0",
              "doc_count": 544897
           },
           {
              "key": "60",
              "doc_count": 538841
           },
           {
              "key": "40",
              "doc_count": 529085
           },
           {
              "key": "08",
              "doc_count": 523681
           },
           {
              "key": "d0",
              "doc_count": 515774
           },
           {
              "key": "54",
              "doc_count": 514771
           },
           {
              "key": "04",
              "doc_count": 509629
           }
        ]
     }
    }

エラスティックにこのフィールドを強制的にマッピングし、キーに分割しないようにするにはどうすればよいでしょうか?

4

2 に答える 2

4

次のマッピング、 es フィールドのカスタム アナライザーを試してみてくださいmac_address

アナライザーの定義

curl -XPUT http://localhost:9200/INDEX  -d '
{
    "settings" : {
        "analysis" : {
            "analyzer" : {
                "my_edge_ngram_analyzer" : {
                    "tokenizer" : "my_edge_ngram_tokenizer"
                }
            },
            "tokenizer" : {
                "my_edge_ngram_tokenizer" : {
                    "type" : "edgeNGram",
                    "min_gram" : "2",
                    "max_gram" : "17"
                }
            }
        }
    }
}'

マッピングを適用

curl -XPUT http://localhost:9200/INDEX/TYPE/_mapping  -d '
{
    "TYPE": {
        "properties" {
            "mac_address": {
                "type": "string",
                "index_analyzer" : "my_edge_ngram_analyzer",
                "search_analyzer": "keyword"
            }
        }
    }
}'
于 2014-09-09T13:07:18.337 に答える
0

ここで説明されているように、生のマルチフィールドを定義してmac_adressに設定する方が簡単でした。古いデータでは機能しませんでしたが、新しいアナライザーでインデックスを変更する必要はありません。not_analyzed

curl -XPUT http://localhost:9200/INDEX/TYPE/_mapping -d'

{
    "TYPE" : {
        "properties" : {
            "mac_address" : {
                "type" : "string",
                "fields":{
                    "raw" : {
                      "type": "string",
                      "index": "not_analyzed"
                    }
                  }
            }
        }
    }
}'

次に、集計のためにフィールドを使用するだけですmac_address.raw

curl -XPOST http://localhost:9200/INDEX/TYPE/_search?search_type=count -d'

{
    "aggs" : { 
        "unique_macs" : { 
            "terms" : {
              "field" : "mac_address.raw" 
            }
        }
    }
}'
于 2015-01-03T11:50:18.877 に答える