Regex 正则表达式结果的刻面
我有一个包含“源”字段的文档的弹性索引。Regex 正则表达式结果的刻面,regex,elasticsearch,facet,Regex,elasticsearch,Facet,我有一个包含“源”字段的文档的弹性索引。 {“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”} 假设源代码未被分析,我可以: {“查询”:{“通配符”:“/
{“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”}
假设源代码未被分析,我可以:
{“查询”:{“通配符”:“/Steve/*”}
去拿史蒂夫的所有文件。我希望能够对它们的位置进行分类统计
期望输出:
“/Steve/SomePath”:1,
“/史蒂夫/其他人”:2,
“/Steve”:2/*很好,省略这个就可以了*/
所以,我试图使用一个正则刻面来挑选出我想要刻面的源代码。我知道这不是最有效的方法,我们已经有了另一个使用自定义标记器的想法,但是如果我现在可以得到一个简单的工作版本,我们可以在以后改进它
{
“查询”:{
“通配符”:“/Steve/*”
},
“方面”:{
“标签”:{
“条款”:{
“字段”:“OriginalURI”,
“regex”:“^\\/Steve\\/.\\/.$”,
“regex|u标志”:“DOTALL | UNICODE|u大小写”
}
}
}
}
我希望这会影响到/Steve/
之后的所有事情(假设我能指出使用哪一组比赛)。事实上,它似乎只作为一个过滤器应用——是否应该在facet中包含完整的源代码——因此我只需要获得每个唯一的源代码,并且计数为1
我走的路对吗?如果没有,那么正确/简单的方法是什么?您可以使用术语脚本提取您想要刻面的部分:
curl -XGET 'localhost:9200/test/_search?pretty=true' -d '{
"query": {
"wildcard": {"OriginalURI": "/Steve/*"}
},
"facets": {
"tag": {
"terms": {
"field": "OriginalURI",
"script": "term.replaceAll(\"(\\\\/[^\\\\/]+)$\", \"\")"
}
}
}
}'
您可以使用术语脚本提取您想要刻面的零件:
curl -XGET 'localhost:9200/test/_search?pretty=true' -d '{
"query": {
"wildcard": {"OriginalURI": "/Steve/*"}
},
"facets": {
"tag": {
"terms": {
"field": "OriginalURI",
"script": "term.replaceAll(\"(\\\\/[^\\\\/]+)$\", \"\")"
}
}
}
}'
我不知道ElasticSearch的第一件事(包括它使用的正则表达式引擎),但是如果你的过滤器通过完全正则表达式的不同匹配,并且你匹配整个路径和文件名(由于锚),当然,你会得到1的计数。因此,不匹配文件名,只匹配路径:
^/Steve/*?/
或者更好的路径(如果支持),^/Steve/[^/]*
。还有,为什么你逃避了前两个斜杠而没有逃避第三个斜杠?@m.buettner re:第三个,你说得对,应该逃避——我的各种尝试造成了复制/粘贴错误。我会同意你的建议,谢谢-正如你所说,我还不知道我的正则表达式。。。应该让您了解最新情况。@Basic,您看过pathhierarchy标记器了吗?也许这会更容易满足你的需要。哎哟,是的,你说得很对。我很想看看最终的解决方案。我不知道ElasticSearch(包括它使用的正则表达式引擎)的第一件事,但是如果你的过滤器通过完全正则表达式的不同匹配,并且你匹配了整个路径和文件名(由于锚),当然,你会得到1。因此,不匹配文件名,只匹配路径:^/Steve/*?/
或者更好的路径(如果支持),^/Steve/[^/]*
。还有,为什么你逃避了前两个斜杠而没有逃避第三个斜杠?@m.buettner re:第三个,你说得对,应该逃避——我的各种尝试造成了复制/粘贴错误。我会同意你的建议,谢谢-正如你所说,我还不知道我的正则表达式。。。应该让您了解最新情况。@Basic,您看过pathhierarchy标记器了吗?也许这会更容易满足你的需要。哎哟,是的,你说得很对。我很想看看最终的解决方案。谢谢,我明天会做一个旋转并再次发表评论。嗨,Igor,我在这里找到了关于支持的脚本语法的文档吗?我查看了mvel,发现replaceAll似乎不在那里。所以,你需要检查一下,谢谢,我明天会给你一个旋转并再次发表评论。嗨,Igor,我在这里找到关于支持的脚本语法的文档了吗?我查看了mvel,发现replaceAll似乎不在那里。所以,你需要检查一下