我在类中有以下属性:
public DateTime InsertedTimeStamp { get; set; }
Run Code Online (Sandbox Code Playgroud)
使用ES中的以下映射
"insertedTimeStamp ":{
"type":"date",
"format":"yyyy-MM-ddTHH:mm:ssZ"
},
Run Code Online (Sandbox Code Playgroud)
我想运行一个聚合来返回按"星期几"分组的所有数据,即"星期一","星期二"......等等
我知道我可以在聚合调用中使用"脚本"来执行此操作,请参阅此处,但是,根据我的理解,如果有大量文档(使用此脚本,请考虑分析日志记录),使用脚本会对性能产生不小的影响).
有没有办法可以用'子属性'映射属性.即我有一个字符串,我可以做:
"somestring":{
"type":"string",
"analyzer":"full_word",
"fields":{
"partial":{
"search_analyzer":"full_word",
"analyzer":"partial_word",
"type":"string"
},
"partial_back":{
"search_analyzer":"full_word",
"analyzer":"partial_word_back",
"type":"string"
},
"partial_middle":{
"search_analyzer":"full_word",
"analyzer":"partial_word_name",
"type":"string"
}
}
},
Run Code Online (Sandbox Code Playgroud)
所有.net代码中的类都具有单个属性.
我可以做类似的事情来存储'完整日期',然后分别存储'年','月'和'日'等(在索引时某种'脚本'),或者我需要在上课并单独映射?这是变形所做的吗?(现在已折旧,因此似乎表明我需要单独的字段......)
绝对可以使用pattern_capture令牌过滤器在索引时执行此操作.
您首先要为每个日期部件定义一个分析器+令牌过滤器组合,并将每个分配器分配给日期字段的子字段.每个令牌过滤器仅捕获它感兴趣的组.
{
"settings": {
"analysis": {
"analyzer": {
"year_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"year"
]
},
"month_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"month"
]
},
"day_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"day"
]
},
"hour_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"hour"
]
},
"minute_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"minute"
]
},
"second_analyzer": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"second"
]
}
},
"filter": {
"year": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"(\\d{4})-\\d{2}-\\d{2}[tT]\\d{2}:\\d{2}:\\d{2}[zZ]"
]
},
"month": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"\\d{4}-(\\d{2})-\\d{2}[tT]\\d{2}:\\d{2}:\\d{2}[zZ]"
]
},
"day": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"\\d{4}-\\d{2}-(\\d{2})[tT]\\d{2}:\\d{2}:\\d{2}[zZ]"
]
},
"hour": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"\\d{4}-\\d{2}-\\d{2}[tT](\\d{2}):\\d{2}:\\d{2}[zZ]"
]
},
"minute": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"\\d{4}-\\d{2}-\\d{2}[tT]\\d{2}:(\\d{2}):\\d{2}[zZ]"
]
},
"second": {
"type": "pattern_capture",
"preserve_original": false,
"patterns": [
"\\d{4}-\\d{2}-\\d{2}[tT]\\d{2}:\\d{2}:(\\d{2})[zZ]"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd'T'HH:mm:ssZ",
"fields": {
"year": {
"type": "string",
"analyzer": "year_analyzer"
},
"month": {
"type": "string",
"analyzer": "month_analyzer"
},
"day": {
"type": "string",
"analyzer": "day_analyzer"
},
"hour": {
"type": "string",
"analyzer": "hour_analyzer"
},
"minute": {
"type": "string",
"analyzer": "minute_analyzer"
},
"second": {
"type": "string",
"analyzer": "second_analyzer"
}
}
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,当您为某个日期编制索引时2016-01-22T10:01:23Z,您将获得使用相关部分填充的每个日期子字段,即
date: 2016-01-22T10:01:23Zdate.year: 2016date.month: 01date.day: 22date.hour: 10date.minute: 01date.second: 23然后,您可以自由地聚合任何这些子字段以获得您想要的内容.
| 归档时间: |
|
| 查看次数: |
875 次 |
| 最近记录: |