【发布时间】:2015-09-16 11:08:20
【问题描述】:
我正在搜索一个名为 package 的元素,该元素具有 pkg_scope 字段。
当我将以下字符串添加到我的查询中时,我得到 200 个结果:
AND ( pkg_scope:'Scope Undefined')
当我添加以下字符串时,我得到一个结果:
AND ( NOT pkg_scope:'Top File')
一个结果的范围为“范围未定义”。我认为期望第二个查询结果包含第一个查询结果是合理的。我错过了什么吗?
这是完整的查询:
query: *:* AND rectype:'Package' AND isPublic:"Yes" AND ( NOT pkg_scope:'Top File' )
我使用的是 ES 1.7.1
【问题讨论】:
-
为什么你会期望一个更严格的查询(一个需要更多
AND子句的查询)会有更多个结果?为什么要以*:*开始查询?查询*:* AND field:term得到与field:term完全相同的结果,只是更慢(除非elasticsearch 足够聪明,可以优化掉*:*,它可能是)。 -
抱歉,我的措辞可能不正确。前两个查询在最后一个查询结束时互换。
-
啊,我明白你的意思了。感谢您的澄清。我相信你遇到的问题是这个问题:stackoverflow.com/questions/16089831/… 不过,我有点困惑,为什么在这种情况下你会得到任何结果。
-
顺便说一下,对于这个和其他问题I kinda hate lucene's and/or/not syntax。 +/- 语法要好得多。
标签: elasticsearch lucene