Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式结果的刻面_Regex_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Facet - Fatal编程技术网 elasticsearch,facet,Regex,elasticsearch,Facet" /> elasticsearch,facet,Regex,elasticsearch,Facet" />

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似乎不在那里。所以,你需要检查一下