布尔查询不会在Elasticsearch中返回预期数据

时间:2014-03-06 10:18:42

标签: elasticsearch

我在Kibana报告的Elasticsearch中有以下文档:

{"deviceId":"C1976429369BFE063ED8B3409DB7C7E7D87196D9","appId":"DisneyDigitalBooks.PlanesAdventureAlbum","ostype":"iOS"}

为什么以下查询不会返回成功?

[root@myvm elasticsearch-1.0.0]# curl -XGET 'http://localhost:9200/unique_app_install/_search?pretty=1' -d '
{
  "query" : {
    "bool" : {
      "must" : [ {
        "term" : {
          "deviceId" : "C1976429369BFE063ED8B3409DB7C7E7D87196D9"
        }
      }, {
        "term" : {
          "appId" : "DisneyDigitalBooks.PlanesAdventureAlbum"
        }
      }, {
        "term" : {
          "ostype" : "iOS"
        }
      } ]
    }
  }
}'

以下是Elasticsearch的回复:

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

作为一个附带问题,这是我查询数据的最快方法吗?

提前谢谢。

更新: 是否与我对此索引使用以下映射这一事实有关?

curl -XPOST localhost:9200/unique_app_install -d '{
    "settings" : {
        "number_of_shards" : 5
    },
    "mappings" : {
        "sdk_sync" : {
            "properties" : {
                "deviceId" : { "type" : "string" , "index": "not_analyzed"},
                "appId" : { "type" : "string" , "index": "not_analyzed"},
                "ostype" : { "type" : "string" , "index": "not_analyzed"}
            }
        }
    }
}'

2 个答案:

答案 0 :(得分:1)

在插入时检查文档的类型是否正确:sdk_sync。

我已经使用过你的物品了,对我来说它很有用。使用以下curl请求为我提供正确的响应:

curl -XPOST localhost:9200/unique_app_install/sdk_sync/1 -d '{
    "settings" : {
        "number_of_shards" : 5
    },
    "mappings" : {
        "sdk_sync" : {
            "properties" : {
                "deviceId" : { "type" : "string" , "index": "not_analyzed"},
                "appId" : { "type" : "string" , "index": "not_analyzed"},
                "ostype" : { "type" : "string" , "index": "not_analyzed"}
            }
        }
    }
}'

curl -XPOST localhost:9200/unique_app_install/sdk_sync/1 -d '{
    "deviceId":"C1976429369BFE063ED8B3409DB7C7E7D87196D9",
    "appId":"DisneyDigitalBooks.PlanesAdventureAlbum",
    "ostype":"iOS"
}'

curl -XGET 'http://localhost:9200/unique_app_install/_search?pretty=1' -d '
{
  "query" : {
    "bool" : {
      "must" : [ {
        "term" : {
          "deviceId" : "C1976429369BFE063ED8B3409DB7C7E7D87196D9"
        }
      }, {
        "term" : {
          "appId" : "DisneyDigitalBooks.PlanesAdventureAlbum"
        }
      }, {
        "term" : {
          "ostype" : "iOS"
        }
      } ]
    }
  }
}'

答案 1 :(得分:0)

除非您指定要分析的字段,否则默认情况下会分析每个字段。

这意味着deviceId“C1976429369BFE063ED8B3409DB7C7E7D87196D9”将被编入索引为“c1976429369bfe063ed8b3409db7c7e7d87196d9”(小写)。

你必须在 LOWER CASE 中使用术语查询或术语过滤器和字符串。

  

这就是你应该指定{“index”:“not_analyzed”}的原因   用于映射。