ElasticSearch查询过滤器无法正常工作

时间:2016-04-20 12:10:35

标签: elasticsearch

我的目的是获取与指定日期范围和uuid(唯一用户ID)匹配的记录。查询似乎失败了: screenshot of UUID based search query and result

如果我使用用户名尝试相同的查询,那么它可以正常工作。

screenshot of Name based search query and result

我怀疑搜索字符串中的:字符并尝试使用\转义它,但它仍然无法正常工作。

可能是什么问题?

映射是:

{
  "top_flows": {
    "mappings": {
      "top flows": {
        "properties": {
          "name": {
            "type": "string"
          },
          "postDate": {
            "type": "date",
            "format": "strict_date_optional_time||epoch_millis"
          },
          "uuid": {
            "type": "string"
          }
        }
      }
    }
  }
}

添加到elasticsearch中的JSON文档是:

doc = {
                        'postDate': timestamp_str,
                        'uuid': uuid,
                        'name': 'sam'
}
timestamp = time.time()
timestamp_str = datetime.fromtimestamp(timestamp).strftime('%Y-%m-%dT%H:%M:%S')
res = self.__eshandle.index(index="top_flows", doc_type='top flows', id=int(timestamp), body=doc)

2 个答案:

答案 0 :(得分:0)

可能的问题是您没有在mapping中对术语字段进行分析。

放置映射

PUT /top_flows
{
  "mappings": {
    "users": { 
      "properties": { 
        "uuid":  {
          "type":   "string", 
          "index":  "not_analyzed"
        }
      }
    }
  }
}

保存文件

POST /top_flows/blogpost
{
"uuid": "FF:FF:FF:FF"
}

搜索

POST /top_flows/_search
{
  "query": {
    "match_all": {}
  }  ,
  "post_filter": {
"term": {
      "uuid": "FF:FF:FF:FF"
    }
  }
}

答案 1 :(得分:0)

最终解决了!

GET /top_flows/_search
{
    "query" : {
              "range" : {
                  "postDate" : {
                    "from" : "now-5m",
                    "to" : "now"
            }
        }
    },
    "filter": { 
      "query_string": {
        "query": "FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:FF\\:11\\:8F\\:FF\\:FF\\:FF",
        "fields": ["uuid"]
      }
    }
}

还不确定早期方法失败的原因:(