2016-05-20 3 views
1

私はこのようになります文書持つオーバーカーディナリティ:私は私のクライアントごとに一意のプロジェクト名の数を取得しますクエリを実行しようとしていますElasticsearch - フルフィールド値

{ 
    "_id":"some_id_value", 
    "_source":{ 
     "client":{ 
     "name":"x" 
     }, 
     "project":{ 
     "name":"x November 2016" 
     } 
    } 
} 

を。このため、project.nameよりcardinalityのクエリを使用しています。私はこの特定のクライアントのための唯一の4ユニークなプロジェクト名があると確信しています。しかし、私は私のクエリを実行すると、私は間違っていると知って5のカウントを取得します。

プロジェクト名にはすべて、クライアントの名前が含まれています。たとえば、クライアントが「X」の場合、プロジェクト名は「X Testing November 2016」または「X Jan 2016」などとなります。これが考慮されるかどうかはわかりません。

この

は、これは私の検索クエリ

{ 
    "fields":[ 
     "client.name", 
     "project.name" 
    ], 
    "query":{ 
     "bool":{ 
     "must":{ 
      "match":{ 
       "client.name":{ 
        "operator":"and", 
        "query":"ABC systems" 
       } 
      } 
     } 
     } 
    }, 
    "aggs":{ 
     "num_projects":{ 
     "cardinality":{ 
      "field":"project.name" 
     } 
     } 
    }, 
    "size":5 
} 

ある文書型

{ 
    "mappings":{ 
     "vma_docs":{ 
     "properties":{ 
      "client":{ 
       "properties":{ 
        "contact":{ 
        "type":"string" 
        }, 
        "name":{ 
        "type":"string" 
        } 
       } 
      }, 
      "project":{ 
       "properties":{ 
        "end_date":{ 
        "format":"yyyy-MM-dd", 
        "type":"date" 
        }, 
        "project_type":{ 
        "type":"string" 
        }, 
        "name":{ 
        "type":"string" 
        }, 
        "project_manager":{ 
        "index":"not_analyzed", 
        "type":"string" 
        }, 
        "start_date":{ 
        "format":"yyyy-MM-dd", 
        "type":"date" 
        } 
       } 
      } 
     } 
     } 
    } 
} 

のマッピングであるこれらの私が得る結果は(私は簡潔にするために2件の結果を掲載している)しています。 num_projects集計は5を返しますが、プロジェクトの合計数である4を返す必要があります。

{ 
    "hits":{ 
     "hits":[ 
     { 
      "_score":5.8553367, 
      "_type":"vma_docs", 
      "_id":"AVTMIM9IBwwoAW3mzgKz", 
      "fields":{ 
       "project.name":[ 
        "ABC" 
       ], 
       "client.name":[ 
        "ABC systems Pvt Ltd" 
       ] 
      }, 
      "_index":"vma" 
     }, 
     { 
      "_score":5.8553367, 
      "_type":"vma_docs", 
      "_id":"AVTMIM9YBwwoAW3mzgK2", 
      "fields":{ 
       "project.name":[ 
        "ABC" 
       ], 
       "client.name":[ 
        "ABC systems Pvt Ltd" 
       ] 
      }, 
      "_index":"vma" 
     } 
     ], 
     "total":18, 
     "max_score":5.8553367 
    }, 
    "_shards":{ 
     "successful":5, 
     "failed":0, 
     "total":5 
    }, 
    "took":4, 
    "aggregations":{ 
     "num_projects":{ 
     "value":5 
     } 
    }, 
    "timed_out":false 
} 

はFYI:プロジェクト名はABCABC Nov 2016ABC retest NovemberABC Mobile App

+0

テストシナリオの要点はありますか? (インデックス、いくつかのデータサンプルとクエリのマッピング) –

+0

@AndreiStefan - あなたが求めている詳細を追加しました。それが役に立てば幸い。 –

答えて

1

ているあなたは、あなたのproject.nameフィールドに次のマッピングが必要になります。

{ 
    "mappings": { 
    "vma_docs": { 
     "properties": { 
     "client": { 
      "properties": { 
      "contact": { 
       "type": "string" 
      }, 
      "name": { 
       "type": "string" 
      } 
      } 
     }, 
     "project": { 
      "properties": { 
      "end_date": { 
       "format": "yyyy-MM-dd", 
       "type": "date" 
      }, 
      "project_type": { 
       "type": "string" 
      }, 
      "name": { 
       "type": "string", 
       "fields": { 
       "raw": { 
        "type": "string", 
        "index": "not_analyzed" 
       } 
       } 
      }, 
      "project_manager": { 
       "index": "not_analyzed", 
       "type": "string" 
      }, 
      "start_date": { 
       "format": "yyyy-MM-dd", 
       "type": "date" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

それは基本的にraw同じと呼ばれるサブフィールドですproject.nameに置かれた値はproject.name.rawに置かれますが、それに触れることはありません(トークン化または分析)。次に、使用するクエリは次のとおりです。

{ 
    "fields": [ 
    "client.name", 
    "project.name" 
    ], 
    "query": { 
    "bool": { 
     "must": { 
     "match": { 
      "client.name": { 
      "operator": "and", 
      "query": "ABC systems" 
      } 
     } 
     } 
    } 
    }, 
    "aggs": { 
    "num_projects": { 
     "cardinality": { 
     "field": "project.name.raw" 
     } 
    } 
    }, 
    "size": 5 
}