我有一个 flex 索引,其中包含“源”字段的文档。

{"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*/

因此,我正在尝试使用正则表达式构面来挑选我想构面的部分源代码。我知道这不是最有效的方法,我们在管道中使用自定义 token 生成器有了另一个想法,但是如果我现在可以得到一个简单的工作版本,我们以后可以对其进行改进。

{
  "query": {
    "wildcard": "/Steve/*"
  },
  "facets": {
    "tag": {
      "terms": {
        "field": "OriginalURI",
        "regex": "^\\/Steve\\/.*?\\/.*$",
        "regex_flags": "DOTALL|UNICODE_CASE"
      }
    }
  }
}

我希望/Steve/之后的所有内容都适用(假设我可以指出要使用的匹配组)。实际上,它似乎仅适用于过滤器-完整的源代码是否包含在构面中-因此,我只获得每个唯一的源代码,其计数为1

我要走正确的道路吗?如果不是,什么是正确/简便的方法?

最佳答案

您可以使用术语脚本来提取您想了解的部分:

curl -XGET 'localhost:9200/test/_search?pretty=true' -d '{
  "query": {
    "wildcard": {"OriginalURI": "/Steve/*"}
  },
  "facets": {
    "tag": {
      "terms": {
        "field": "OriginalURI",
        "script": "term.replaceAll(\"(\\\\/[^\\\\/]+)$\", \"\")"
      }
    }
  }
}'

关于regex - 正则表达式结果的方面,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17403328/

10-13 09:28