假设我在索引中有一些文档。其中一个字段是网址。类似...对部分字符串进行排版
{"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
现在我可以看到广泛2周的方式接近这一点,我不是任忠实球迷。
选项1:脚本。米尔似乎只限于数学运算(至少我无法在文档中找到字符串拆分),所以这将不得不在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的计数,因为这是重要的查询结果的计数。
这很好,但如果我想得到(说)每台服务器的计数器没有办法做到这一点,因为我不知道我需要哪些多值 - 只能转储_entire_索引 - 有效地构建整个树在一个走。因此,我在我的'Parts'建议中加入了一个计数器 – Basic 2013-05-14 16:00:15
不要以为你需要预处理,只需使用[path hierarchy tokenizer](http://www.elasticsearch.org/guide/reference/index-modules/analysis)/pathhierarchy-tokenizer /),它以索引标记的形式给出了相同的结果。 – javanna 2013-05-14 18:36:17
@基本不知道为什么这不好。您是否想要获得第二个级别,不仅适用于特定服务器,还适用于所有服务器?也许看看[这里](http://www.springyweb.com/2012/01/hierarchical-faceting-with-elastic.html)。 – javanna 2013-05-14 18:38:14