我有一个弹性索引,其中包含包含“源”字段的文档。
{"Source": "/Bob/Test/SomeDir/1.doc"},
{"Source": "/Steve/2.doc"},
{"Source": "/Steve/3.doc"},
{"Source": "/Steve/SomePath/4.doc"}
{"Source": "/Steve/SomeOther/5.doc"}
{"Source": "/Steve/SomeOther/6.doc"}
假设来源是not_analyzed
,我可以这样做:
{"query": {"wildcard": "/Steve/*"}}
拿到史蒂夫的所有文件。我希望能够细分他们在哪里的计数。
期望的输出:
"/Steve/SomePath": 1,
"/Steve/SomeOther": 2,
"/Steve": 2 /*Nice to have, omitting this one would be fine*/
所以,我正在尝试使用正则表达式方面来挑选出我想要分面的来源。我知道这不是最有效的方法,我们在管道中使用自定义标记器有另一个想法,但如果我现在可以获得一个简单的工作版本,我们可以稍后改进它。
{
"query": {
"wildcard": "/Steve/*"
},
"facets": {
"tag": {
"terms": {
"field": "OriginalURI",
"regex": "^\\/Steve\\/.*?\\/.*$",
"regex_flags": "DOTALL|UNICODE_CASE"
}
}
}
}
我希望这会影响之后的所有事情/Steve/
(假设我可以指出要使用哪个匹配组)。事实上,它似乎只适用于过滤器——如果完整的源是否包含在构面中——所以我只得到每个唯一的源,计数为1
.
我走在正确的道路上吗?如果不是,那么正确/简单的方法是什么?