由唯一子字符串聚合的Elasticsearch查询(电子邮件域)
发布时间:2020-12-13 20:44:30 所属栏目:百科 来源:网络整理
导读:我有一个弹性搜索查询,它通过索引查询,然后根据特定字段sender_not_analyzed进行聚合.然后,我在同一字段sender_not_analyzed上使用术语聚合,返回顶部“发件人”的存储桶.我的查询目前是: { "size": 0,"query": { "regexp": { "sender_not_analyzed": ".*[@]
我有一个弹性搜索查询,它通过索引查询,然后根据特定字段sender_not_analyzed进行聚合.然后,我在同一字段sender_not_analyzed上使用术语聚合,返回顶部“发件人”的存储桶.我的查询目前是:
{ "size": 0,"query": { "regexp": { "sender_not_analyzed": ".*[@].*" } },"aggs": { "sender-stats": { "terms": { "field": "sender_not_analyzed" } } } } 返回看起来像这样的桶: "aggregations": { "sender-stats": { "buckets": [ { "key": "<Mike <mike@fizzbuzz.com>@MISSING_DOMAIN>","doc_count": 5017 },{ "key": "jon.doe@foo.com","doc_count": 3963 },{ "key": "jane.doe@foo.com","doc_count": 2857 },{ "key": "jon.doe@bar.com","doc_count":1544 } 如何编写聚合,以便为每个唯一的电子邮件域获取单个存储桶,例如foo.com的doc_count为(3963 2857)6820?我可以使用正则表达式聚合来完成此操作,还是需要编写某种自定义分析器来将@中的字符串拆分为字符串的末尾?
这已经很晚了,但我认为这可以通过使用
pattern_replace char filter来完成,你用正则表达式捕获域名,这是我的设置
POST email_index { "settings": { "analysis": { "analyzer": { "my_custom_analyzer": { "char_filter": [ "domain" ],"tokenizer": "keyword","filter": [ "lowercase","asciifolding" ] } },"char_filter": { "domain": { "type": "pattern_replace","pattern": ".*@(.*)","replacement": "$1" } } } },"mappings": { "your_type": { "properties": { "domain": { "type": "string","analyzer": "my_custom_analyzer" },"sender_not_analyzed": { "type": "string","index": "not_analyzed","copy_to": "domain" } } } } } 这里域名char过滤器将捕获域名,我们需要使用keyword tokenizer来获取域名,我使用的是小写过滤器,但是如果你想使用或不使用它取决于你.使用copy_to参数将sender_not_analyzed的值复制到域字段,虽然_source字段不会被修改为包含此值但我们可以查询它. GET email_index/_search { "size": 0,"query": { "regexp": { "sender_not_analyzed": ".*[@].*" } },"aggs": { "sender-stats": { "terms": { "field": "domain" } } } } 这将给你想要的结果. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 【cocos2d-x游戏开发】cocos中的三种缓存类
- QT XML文档的解析 QXmlStreamReader, DOM,SAX 三种解析方
- C# +SharpZipLib 库压缩内存当中的流文件
- c# – Xml文件永远不应该作为String传递,如何激励?
- ruby-on-rails – 如何在rails中设置form_tag中的方法?
- [flex]validator的样式设置
- 使用Flexible.js实现手机端网页内容适配(rem适配法)
- c# – 如何阻止visual studio在设计器中打开我的winforms控
- Swiftで作るToDoアプリ開発チュートリアル
- oracle数据库update批量更新语句