2015-10-06 80 views
0

我想在Elastic中编写一个查询,该查询根据我在数组中的值(在我的R程序中)应用过滤器。本质上,查询:查询以获得Elastic Field与数组中的多元值的精确匹配

  1. 匹配一个时间范围(在弹性时间字段)在弹性
  2. 匹配“的TrackID”字段oth_usr
  3. 返回2个字段在阵列的任何值 - “的TrackID”,“属性ID”

我有以下基本版本的查询,但不知道如何在查询中使用oth_usr数组(上面的第2部分)。

query <- sprintf('{"query":{"range":{"time":{"gte":"%s","lte":"%s"}}}}',start_date,end_date) 
view_list <- elastic::Search(index = "organised_recent",type = "PROPERTY_VIEW",size = 10000000, 
          body=query, fields = c("trackId", "propertyId"))$hits$hits 
+0

我不知道我是否应该试着回答,只是提供线索,或忽略了这个问题。你尝试过什么吗?请尝试阅读[问]和[mcve],并填写您的问题 – Tensibai

回答

0

您需要添加一个terms查询,并把它嵌入还有range一个为bool/must查询。尝试更新您的查询是这样的:

terms <- paste(sprintf("\"%s\"", oth_usr), collapse=", ") 
query <- sprintf('{"query":{"bool":{"must":[{"terms": {"trackId": [%s]}},{"range": {"time": {"gte": "%s","lte": "%s"}}}]}}}',terms,start_date,end_date) 
+0

感谢您的回答。但是当我运行它时,我得到:check_inputs(body)中的错误:解析错误:尾随垃圾 lte“:”1444069800000“}}}]}}} {”query“:{”bool“:{”must“:[ {“ter (right here)------ ^指针指向这个开始 - > {”query“:{”bool“:{”must“:[{”ter –

+0

请再试一次,我可能会在“terms”查询中错过了方括号。 – Val

0

我不流利R中的语法,但是这是原始JSON查询工作。

它会检查你的time场比赛是否给定的范围(start_timeend_time)和您terms精确匹配trackId是否之一。

它只返回trackIdpropertyId领域,根据您的要求:

POST /indice/_search 
{ 
    "_source": { 
    "include": [ 
     "trackId", 
     "propertyId" 
    ] 
    }, 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "range": { 
      "time": { 
       "gte": "start_time", 
       "lte": "end_time" 
      } 
      } 
     }, 
     { 
      "terms": { 
      "trackId": [ 
       "terms" 
      ] 
      } 
     } 
     ] 
    } 
    } 
}