弹性搜索按字段分组
Elastic Search Group by field
我的索引中有以下数据。
{
"id":1,
"car_name" : "ABC-101"
},
{
"id":2,
"car_name" : "DEF-102"
},
{
"id":3,
"car_name" : "ABC-103"
}
我的索引映射是
{
"car": {
"mappings": {
"_doc": {
"properties": {
"car_name": {
"type": "text",
"fielddata": true
}
}
}
}
}
}
Whey 运行 下面的查询
localhost:9200/car/_doc/_search?pretty
带有以下请求正文
{
"size" : 0,
"aggs" : {
"genres" : {
"terms" : {
"field" : "car_name"
}
}
}
}
我收到以下回复
"buckets": [
{
"key": "ABC",
"doc_count": 2
},
{
"key": "DEF",
"doc_count": 1
},
{
"key": "101",
"doc_count": 1
},
{
"key": "102",
"doc_count": 1
},
{
"key": "103",
"doc_count": 1
}
]
为什么不带实际的键 ABC-101 和 DEF-102 为什么 ABC 和 101 被视为单独的键。
默认情况下,字符串字段在 elasticasearch 中是 analyzed
。代表着
"ABC-101" 被索引为 2 个术语 "ABC" 和 "101"。您的
query 也被 analyzed,并且它也被转换成 2 个术语“ABC”和“101”
不管它们之间有什么特殊字符。
这就是为什么他们匹配所有由 -
分隔的字符串,例如 ABC、101、DEF、102 等等。
例如
{
"car": {
"car_name": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
如果您想按原样搜索该字段,您应该将其重新索引为 "index":"not_analyzed"
您可以使其与 car_name 字段上的 keyword
一起使用以完全匹配
{
"size" : 0,
"aggs" : {
"genres" : {
"terms" : {
"field" : "car_name.keyword"
}
}
}
我的索引中有以下数据。
{
"id":1,
"car_name" : "ABC-101"
},
{
"id":2,
"car_name" : "DEF-102"
},
{
"id":3,
"car_name" : "ABC-103"
}
我的索引映射是
{
"car": {
"mappings": {
"_doc": {
"properties": {
"car_name": {
"type": "text",
"fielddata": true
}
}
}
}
}
}
Whey 运行 下面的查询
localhost:9200/car/_doc/_search?pretty
带有以下请求正文
{
"size" : 0,
"aggs" : {
"genres" : {
"terms" : {
"field" : "car_name"
}
}
}
}
我收到以下回复
"buckets": [
{
"key": "ABC",
"doc_count": 2
},
{
"key": "DEF",
"doc_count": 1
},
{
"key": "101",
"doc_count": 1
},
{
"key": "102",
"doc_count": 1
},
{
"key": "103",
"doc_count": 1
}
]
为什么不带实际的键 ABC-101 和 DEF-102 为什么 ABC 和 101 被视为单独的键。
默认情况下,字符串字段在 elasticasearch 中是 analyzed
。代表着
"ABC-101" 被索引为 2 个术语 "ABC" 和 "101"。您的
query 也被 analyzed,并且它也被转换成 2 个术语“ABC”和“101”
不管它们之间有什么特殊字符。
这就是为什么他们匹配所有由 -
分隔的字符串,例如 ABC、101、DEF、102 等等。
例如
{
"car": {
"car_name": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
如果您想按原样搜索该字段,您应该将其重新索引为 "index":"not_analyzed"
您可以使其与 car_name 字段上的 keyword
一起使用以完全匹配
{
"size" : 0,
"aggs" : {
"genres" : {
"terms" : {
"field" : "car_name.keyword"
}
}
}