【问题标题】:Elasticsearch lucene queryElasticsearch lucene 查询
【发布时间】: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


【解决方案1】:

问题在于字符串周围的引号。对于多个单词,需要使用双引号。 所以NOT pkg_scope:'Top File'需要改成NOT pkg_scope:"Top File"

【讨论】:

    猜你喜欢
    • 2016-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-22
    • 1970-01-01
    • 2020-10-09
    • 2015-07-24
    • 1970-01-01
    相关资源
    最近更新 更多