【发布时间】:2015-12-30 23:47:26
【问题描述】:
我的弹性搜索文档中有一个字段path,其中包含这样的条目
/logs/hadoop-yarn/container/application_1451299305289_0120/container_e18_1451299305289_0120_01_011007/stderr
/logs/hadoop-yarn/container/application_1451299305289_0120/container_e18_1451299305289_0120_01_008874/stderr
#*Note -- I want to select all the documents having below line in the **path** field
/logs/hadoop-yarn/container/application_1451299305289_0120/container_e18_1451299305289_0120_01_009257/stderr
我想对这个path字段进行类似的查询给定某些事情(基本上是所有3个的AND条件):-
- 我给了申请号
1451299305289_0120 - 我也给了任务号
009257 - 路径字段还应包含
stderr
鉴于上述条件,应选择路径字段作为第三行的文档
这是我迄今为止尝试过的
http://localhost:9200/logstash-*/_search?q=application_1451299305289_0120 AND path:stderr&size=50
此查询满足第三个条件,部分满足第一个条件,即如果我搜索 1451299305289_0120 而不是 application_1451299305289_0120,我得到 0 个结果。 (我真正需要的是搜索1451299305289_0120)
当我尝试这个时
http://10.30.145.160:9200/logstash-*/_search?q=path:*_1451299305289_0120*008779 AND path:stderr&size=50
我得到了结果,但在开始时使用* 是一项昂贵的操作。他们是另一种有效实现这一目标的方法吗(例如使用nGram 和使用fuzzy-search 的elastic-search)
【问题讨论】:
-
使用 nGram 会非常昂贵,但是你可以做什么 edgeNGram 在分析时使用几个过滤器。我建议你可以看看这篇文章。stackoverflow.com/questions/9421358/…这可能没什么帮助,如你可以得到一些方向..
标签: elasticsearch elasticsearch-plugin