0

假设我在索引中有一些文档。其中一个字段是 url。就像是...

{"Url": "Server1/Some/Path/A.doc"},
{"Url": "Server1/Some/OtherPath/B.doc"},
{"Url": "Server1/Some/C.doc"},
{"Url": "Server2/A.doc"},
{"Url": "Server2/Some/Path/B.doc"}

我正在尝试按搜索结果的路径提取计数。这可能是每个分支的查询。

例如:

Initial query:
    Server1: 3
    Server2: 2

Server1 Query:
    Some: 3

Server1/Some Query:
    Path: 1
    OtherPath: 1

现在我可以广泛地看到两种方法来解决这个问题,我不是这两种方法的忠实粉丝。

选项 1:脚本。mvel 似乎仅限于数学运算(至少我在文档中找不到字符串拆分)所以这必须在 Java 中。这是可能的,但如果有很多记录,就会感觉开销很大。

选项 2:将路径部分存储在文档旁边...

{"Url": ..., "Parts": ["1|Server1","2|Some","3|Path"]},
{"Url": ..., "Parts": ["1|Server1","2|Some","3|OtherPath"]},
{"Url": ..., "Parts": ["1|Server1","2|Some"]},
{"Url": ..., "Parts": ["1|Server2"]},
{"Url": ..., "Parts": ["1|Server2","2|Some","3|Path"]}

这样我可以做类似的事情。Urls starting with 'Server1/Some', facet on parts starting with 3|. 这感觉太可怕了。

有什么好方法可以做到这一点?我可以根据需要进行尽可能多的预处理,但需要来自 ES 的计数,因为它是重要的查询结果计数。

4

1 回答 1

0

给定一个带有 url 的文档/a/b/c

有一个多值字段url 和输入(使用预处理)值:/a, /a/b,/a/b/c

编辑

当您想将显示计数限制为特定深度的路径时,您可以如上所述设计多个多值字段。每个字段将代表一个特定的深度。

ES 客户端应该包含逻辑来决定哪个深度(以及哪个字段)来查询构面。

尽管如此,仍然感觉像是一个黑客,事实上,如果没有数据控制,你最终可能会为此获得很多字段。

于 2013-05-14T14:20:24.377 回答