当前位置: 首页 > 知识库问答 >
问题:

查询DSL elasticsearch不起作用

濮阳和泰
2023-03-14

我想让ElasticSearch在我的盒子上工作。我有以下映射:

{
  "sneakers" : {
    "mappings" : {
      "sneaker" : {
        "properties" : {
          "brand" : {
            "type" : "nested",
            "properties" : {
              "id" : {
                "type" : "integer",
                "index" : "no"
              },
              "title" : {
                "type" : "string"
              }
            }
          }
        }
      }
    }
  }
}

所以我有一个“运动鞋”索引,它有一个“运动鞋”类型,一个“品牌”属性,它有一个“ID”和一个“标题”。

检查运动鞋是否存在,运行curl-xget“http://localhost:9200/sneakers/sneaker/1?prettley”,我得到:

{
  "_index" : "sneakers",
  "_type" : "sneaker",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "brand" : {
      "id" : 1,
      "title" : "Nike"
    }
  }
}

现在,runningcurl-xget'http://localhost:9200/sneakers/_search?q=brand.title=adidas&pretty'我得到:

{
  "took" : 13,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1330,
    "max_score" : 0.42719018,
    "hits" : [ {
      "_index" : "sneakers",
      "_type" : "sneaker",
      "_id" : "19116",
      "_score" : 0.42719018,
      "_source" : {
        "brand" : {
          "id" : 2,
          "title" : "Adidas"
        }
      }
    }, ...
}

但是一旦我开始使用这样的查询DSL:

curl -XGET 'http://localhost:9200/sneakers/_search?pretty' -d '{
    "query" : {
        "term" : { "brand.title" : "adidas" }
    }
}
'

我得到

{
  "took" : 9,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : null,
    "hits" : [ ]
  }
}

不知何故,即使运行最简单的查询,查询DSL也不会返回任何东西。我运行的是ES 2.3.1。

你知道为什么查询DSL不起作用吗?我做错了什么?

共有1个答案

端木高卓
2023-03-14

您已经将brand字段映射为嵌套类型,因此需要使用嵌套查询来查询它,如下所示:

curl -XGET 'http://localhost:9200/sneakers/_search?pretty' -d '{
  "query" : {
    "nested": {
        "path": "brand",
        "query": {
           "term" : { "brand.title" : "adidas" }
        }
    }
  }
}
'

注意:如果从映射中移除“type”:“nested”,查询就可以工作。

 类似资料:
  • 你能帮我解决这个问题吗?我想使用此方法在我的数据库中查找特定的缺口(它是由Apache Derby制作的)。我使用了EntityManager并从NetBeans中的数据库中映射持久性-实体类。 我得到这个错误: Java . lang . illegalargumentexception:在EntityManager中创建查询时出现异常:< br >异常描述:解析[SELECT * FROM U

  • 问题内容: 我有一个非常简单的查询,像这样: 我的默认设置是或某些用户ID,但是由于某种原因,该查询总是返回0行,我也尝试过,但还是没有运气,这可能是什么错误? EDTI 因此,在运行更多查询后,我发现我的问题是字段的默认值,因此我修改了查询,现在可以正常使用: 问题答案: NULL值需要特殊处理:http : //dev.mysql.com/doc/refman/5.1/en/working-w

  • 问题内容: 非常感谢你的帮助。我有一个和表。位置 我对位置模型执行以下查询。 然后,我要对其执行附加查询并根据以下内容对其进行过滤 该查询并 没有 工作。它返回一个空对象。 这是参数: location_params 1} permitted: true> ads_params 1} permitted: true> 不允许这样输入特定的列: 我有postgresql,我没有考虑过使用SQL,但是

  • 问题内容: 我正在使用嵌套集模型在iPhone上的本地SQLite数据库中存储较大的数据层次结构。我从他们的网站上阅读了MySQL技术文章,了解如何执行此操作,但是他们建议的查询(以及我需要的查询)之一似乎不适用于SQLite,并且我不确定如何解决它。 SQLite报告不是列,我认为这是因为其子查询实现不完整。有人对如何解决此限制有任何想法吗? 查询的目的是获取给定父节点的所有直接子代。 问题答案

  • 问题内容: 我有两个表:和。 我想基于item_number从两个表中检索数据,并且在以下查询中工作正常。(使用内联接) 但是我也希望’items’表中的所有行,即使在opensalesorder和items中找不到与ItemName匹配的内容。 但是使用下面的查询似乎对我不起作用。 即使在左侧找不到匹配项,右联接也会从右表返回结果。 查询正确吗? 谢谢 问题答案: 这是您的查询: 该条件是“撤销

  • 我正在尝试使用条令2查询生成器创建以下场景 我设置了Doctrine2自行生成的以下关系 这是我的回购课 但我没能完成。它抛出以下错误 [Tue Oct01 22:30:11 2013][错误][客户端127.0.0.1]PHP致命错误:未捕获异常'Doctrine\ORM\Query\QueryExc0019',消息'SELECT p from Entity\Tree p LEFT JOIN p