【问题标题】:ElasticSearch basic query, why doesn't it workElasticSearch 基本查询,为什么不起作用
【发布时间】:2015-05-15 21:39:46
【问题描述】:

我正在尝试学习如何查询 ElasticSearch。我的背景是数据库开发,我一直在思考 sql 的做法。我确实阅读了关于不同类型查询的 ES 文档,但其中许多对我来说仍然没有意义。我有几个问题,真的希望有人能帮助我。

  1. _search 和 _search 之间有区别吗?search_type=count?
  2. 有没有一种方法可以查询映射,以便查看字段名称和类型?
  3. 我需要从 app="AAA" 的所有文档中恢复 app、cat 和 sub 字段。

为什么这样的东西不起作用?

{
  "fields":["app","cat","sub"],
  "query":{
        "field" : {
            "app.raw": "AAA"
        }
    },
  "from": 0,
  "size": 10
}

谢谢

【问题讨论】:

  • 我真的认为您应该尝试在手册中找到答案。帮忙:search_type=count 不返回命中。查找 _mapping,您可能想查看术语查询甚至更好的术语过滤器。最后寻找 _source_include 而不是字段。

标签: elasticsearch


【解决方案1】:
  1. _search 和 _search 之间有区别吗?search_type=count?

是的,后者将返回实际命中。如果您只需要知道它将匹配多少个文档,或者您只需要过滤器/聚合的结果,那么后者适合您。

  1. 有没有一种方法可以查询映射,以便查看字段名称和类型?

使用get mapping 端点:http://localhost:9200/index/type/_mapping?pretty

语法有多种形式,我用type/_mapping,但你也可以叫它_mapping/type

  1. 我需要从 app="AAA" 的所有文档中恢复 app、cat 和 sub 字段。

在不知道您的映射的情况下,很难猜测真正出了什么问题。

由于您使用的是app.raw,我假设您可能使用了Core Types,这是一个not_analyzed 字段,因此您可能应该使用最适合它的查询,即Term Query

{
  "query":{
    "term" : {
      "app.raw": "AAA"
    }
  }
}

如果以上没有解决,请提供yourindex/yourtype/_mapping?pretty的输出。

掌握查询 DSL 对于任何有用的东西都很重要。我推荐阅读Query DSL reference,浏览"Search in Deptht"-Guide,我还可以推荐最近的视频Query DSL not just for Wizards,揭开一些奇怪的部分的神秘面纱。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 1970-01-01
    • 2017-02-11
    • 2017-07-08
    • 2016-07-30
    • 2017-08-02
    相关资源
    最近更新 更多