弹性搜索查询适用于数字但不适用于字符串

时间:2014-08-25 17:00:24

标签: elasticsearch elasticsearch-jdbc-river

在我的弹性搜索中,每个doucument都采用以下格式

{
      "_index" : "logstash-2014.08.11",
      "_type" : "apache-error",
      "_id" : "b9vZxg-wRbudJbsV6-vD-A",
      "_score" : 1.0, 
      "_source" : {
          "@version":"1",
          "@timestamp":"2014-08-11T02:07:26.000Z",
          "host":"127.0.0.1:49558",
          "type":"apache-error",
          "loglevel":"error",
          "clientip":"123.12.12.12",
          "errormsg":"htaccess: require valid-user not given a valid session, are you using lazy sessions?",
          "timestamp_submitted":"2014-08-14 19:25:11 UTC",
          "geoip":{"ip":"123.12.12.12"
              "country_code2":"US",
              "country_code3":"USA",
              "country_name":"United States",
              "continent_code":"NA",
              "latitude":38.0,
              "longitude":-97.0,
              "dma_code":0,
              "area_code":0,
              "location":[-97.0,38.0]
          }
      }
  }

我想写一个查询,其中geoip中的country_code2等于US

当我尝试在geoip.ip上运行查询时,查询执行得很好,即使对于geo.latitude工作正常,但是当我尝试运行geo.country_code2时,我没有得到任何结果。 下面是我正在使用的查询

curl -XGET  http://abcd.dev:9200/_search?pretty=true -d 
{
    "query":{
        "term":{
            "geoip.ip":"123.12.12.12"
         }
     },
     "filter":{
         "range":{
             "@timestamp":{
                 "gte":"2014-08-12","lte":"now
             }
         }
     }
 }

我没有得到任何结果的实际查询

curl -XGET  http://abcd.dev:9200/_search?pretty=true -d 
    {
        "query":{
            "term":{
                "geoip.country_code2":"US"
             }
         },
         "filter":{
             "range":{
                 "@timestamp":{
                     "gte":"2014-08-12","lte":"now
                 }
             }
         }
     }

1 个答案:

答案 0 :(得分:0)

使用match query,而不是术语查询。

{
    "query":{
        "match":{
            "geoip.country_code2":"US"
        }
    }
}

匹配查询将使用相同的分析器在字段上搜索用于索引它的内容。