2015-10-20 55 views
0

如何檢查我的查詢條件是否是我的某個字段中的鍵?例如,以下是存儲的文檔:查詢ElasticSearch哈希中是否存在鍵

{ 
    field1: "some value", 
    field2: "some other value", 
    field3: { 
    something: [1,2], 
    else: [2,3] 
    } 
} 

查詢「something」應該返回該文檔。查詢「一些值」也應返回該文檔。這是我到目前爲止有:

{ 
    query: { 
    filtered: { 
     query: { 
     multi_match: { 
      query: query, 
      fields: ['field1', 'field2'], 
      operator: 'and' 
     } 
     }, 
     filter: { 
     or: [ 
      { 
      exists: { field: "field3"} 
      } 
     ] 
     } 
    } 
    } 
} 

回答

0

假設你想「一定的價值」,在adjesent時尚,下面應該很好地工作 -

{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "exists": { 
      "field": "field3" 
     } 
     }, 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "bool": { 
       "must": [ 
        { 
        "match_phrase": { 
         "field1": "some value" 
        } 
        }, 
        { 
        "match_phrase": { 
         "field2": "some value" 
        } 
        } 
       ] 
       } 
      }, 
      { 
       "multi_match": { 
       "query": "something", 
       "fields": [ 
        "field1", 
        "field2" 
       ], 
       "operator": "and" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
+0

我拿出'match_phrase'部分,因爲我沒有將不同的查詢條件傳遞給不同的字段(即在所有字段中查詢相同的術語)。此外,這似乎並沒有工作。我收到錯誤:'沒有查詢註冊[存在]'。 :( – user3325749

+0

我已更正查詢,你現在可以嘗試嗎 –

+0

查詢「something」只是因爲match_phrase與另一個字符串匹配而返回該文檔,刪除嵌套的bool不會返回文檔。 – user3325749

0
{ 
    query: { 
    filtered: { 
     filter: { 
     or: [ 
      { 
      query: { 
       multi_match: { 
       query: query, 
       fields: ['field1', 'field2'], 
       operator: "and" 
       } 
      } 
      }, 
      { 
      exists: { field: "field3.query" } 
      } 
     ] 
     } 
    } 
    } 
} 

唯一需要注意的是,如果query是字符串與多個術語(或數組),你必須爲每個術語創建一個exists過濾器。