在elasticsearch上按类似UUID格式的字段进行查询

时间:2015-12-15 09:41:54

标签: elasticsearch

我已成功编制索引文档,因此我的意思是在创建新字段(动态)的同时创建了映射。

{
  "user":"living_team",
  "timestamp":"2015-12-14T18:06:47.085Z",
  "matter":"snip2.PNG",
  "comment":"Archive",
  "channel":"Feina",
  "feedTypes":[
     20
  ],
  "property_general_ldate":"2015-12-14T18:06:47.085Z",
  "property_tSize":7595.0,
  "resources":[
     {
        "timestamp":"2015-12-14T16:58:00.598Z",
        "matter":"snip2.PNG",
        "comment":"Archive",
        "channel":"Feina",
        "feedType":20,
        "mime":"image/png",
        "source":{
           "sourceId":{
              "id":"C:\\Users\\Beep\\Desktop\\share\\snip2.PNG",
              "batch":"c38eec2d-a282-11e5-baf4-382c4ab9e433",
              "client":"VIM12HCNZL"
           },
           "feedType":20,
           "property_folder":"C:\\Users\\Beep\\Desktop\\share",
           "property_lastAccessFolder_ldate":1450111821506
        },
        "property_size":7595.0,
        "property_creation_ldate":"2015-12-14T16:50:20.578Z",
        "property_name":"snip2.PNG",
        "nestedResources":[

        ]
     }
  ]

}

我需要获取以下文件:resources.source.sourceId.id is exactly "X"。我已尝试过此查询,但其结果为空。

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d '{
  "query":{
     "filtered":{
        "query":{
           "term":{
              "resources.source.sourceId.batch":"3fcb8905-a307-11e5-88de-382c4ab9e433"
           }
        },
        "filter":{
           "match":{
              "channel":"FeINa"
           }
        }
     }
  }
}'

2 个答案:

答案 0 :(得分:10)

your other question中的问题相同,即resources.source.sourceId.batch字符串字段已创建为analyzed字段,因此值c38eec2d-a282-11e5-baf4-382c4ab9e433具有已被标记为五个令牌c38eec2da28211e5baf4382c4ab9e433

处理此问题的正确方法是为该字段设置特定的not_analyzed映射。

另一种暂时的方法是使用完全匹配的query_string查询:

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d '{
  "query":{
     "filtered":{
        "query":{
           "query_string":{
              "query": "resources.source.sourceId.batch:\"3fcb8905-a307-11e5-88de-382c4ab9e433\""
           }
        },
        "filter":{
           "match":{
              "channel":"FeINa"
           }
        }
     }
  }
}'

答案 1 :(得分:2)

此外,如果您不想在模板中添加每个UUID字段,则可以使用terms条件或term并在每个-上拆分您的UUID字符串

我对性能不确定......但它确实可以解决问题。

您的查询中应该有类似内容:

curl -XGET 'http://ESNode01:9201/living_team/inputs/_search?pretty' -d '{
  "query":{
     "filtered":{
        "query":{
           "terms":{
              "resources.source.sourceId.batch":["3fcb8905", "a307", "11e5", "88de", "382c4ab9e433"]
           }
        },
        "filter":{
           "match":{
              "channel":"FeINa"
           }
        }
     }
  }
}'