【问题标题】:ElasticSearch using wildcard and term queries使用通配符和术语查询的 ElasticSearch
【发布时间】:2015-08-09 01:53:32
【问题描述】:

我是使用 Elastic Search 的新手,我也从未使用过 Lucene。

我构建了这个查询:

  {
    "query" : {
      "wildcard" : { "referer" : "*.domain.com*" }
    },
    "filter" : {
      "query" : {
        "term" : { "first" : "1" }
      }
    },
    "facets" : {
      "site_id" : {
        "terms" : {
          "field" : "site",
          "size" : "70"
        }
      }
    }
  }

通配符工作得很好,但术语过滤器被忽略了,我做错了什么?

我需要同时使用通配符和术语过滤结果

谢谢!

【问题讨论】:

  • 您在filtered "term" 周围添加了一个"query"。把它剪掉,它应该可以工作。

标签: elasticsearch


【解决方案1】:

假设您正在尝试对通配符查询结果应用过滤器, 您可以使用 FilteredQuery。但是,您的情况可能更适合过滤器。

您使用查询过滤器。取而代之的是,您可以直接在 FilteredQuery 中使用 TermFilter,而不是从 TermQuery 中进行过滤。 TermFilter 应该更快,因为它直接使用了 TermsEnum。

请注意,过滤器的结果缓存在 FilterCache 中,并且过滤器更快,因为它们不对文档进行任何评分。在您的情况下,即使 FilteredQuery 的过滤器部分可以快速工作,但通配符查询将不必要地进行评分。您可以尝试使用 AND 过滤器来组合 queryfilter(通配符查询)和术语过滤器,而不是 FilteredQuery。

要使过滤器按您的要求工作,请尝试以下操作。 (我自己没试过)

{
    "filtered" : {
        "query" : {
            "wildcard" : { "referer" : "*.domain.com*" }
        },
        "filter" : {
             "term" : { "first" : "1" }
        }
    },
    "facets" : {
        "site_id" : {
            "terms" : {
                "field" : "site",
                "size" : "70"
            }
        }
    }
}

【讨论】:

  • 我试过了,我得到了这个错误:No parser for element [filtered] 然后我在过滤后的周围做了一个查询包装,一切都很好,我在回复,谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-06
  • 1970-01-01
  • 2014-11-18
相关资源
最近更新 更多