2016-09-03 40 views
0

如何elasticsearch編寫查詢以下條件組合和或elasticsearch

Select * from table1 where (cnd1 or cond2) and (cnd3) 

我COND2值從嵌套對象。我的JSON對象是低於

details={ "name"="name1", 
     "address":"{ 
     "city":"city1" 
     }" 
     } 

我需要從市上述目的

details.address.city 

是上面的語法是正確的,如果不是如何讓第二個對象城市的價值。

回答

0
{ 
     "bool" : { 
      "must" : cond3, 
      "should" : [ 
       cond1, 
       cond2 
      ], 
      "minimum_should_match" : 1 
     } 

} 

通過這個鏈接瞭解更多信息https://www.elastic.co/guide/en/elasticsearch/reference/2.3/query-dsl-bool-query.html

+0

嗨blackmamba,感謝您的建議。現在我改變了我的問題,你可以建議我改變的查詢 – venkat

+0

你能給我你的映射嗎?你現在正在嘗試什麼查詢? – blackmamba

+0

你給我想法我問的問題,還有一件事是,對於cond2我需要檢查我的嵌套對象內城市的價值。 – venkat

0

您可以輕鬆地創建Elasticsearch條件查詢。但是你的數據部分有一些奇怪的情況。

details={ "name"="name1", 
     "address":"{ 
     "city":"city1" 
     }" 
     } 

Elasticsearh將您的數據保存爲json對象,但您應該將數據作爲json。在本節中,有一個對象,您嘗試發送。讓我們來看看:

有一個detail對象的name屬性,它是一個字符串。還有一個地址屬性,它也是一個字符串。如果要通過details.address.city訪問此對象,它應該是一個必須包含城市屬性的對象。現在我們試圖修復:

{ 
    "id":..., 
    ... 
    "details": { 
    "name": "name1", 
    "address": { 
     "city": "city1" 
    } 
    } 
} 

在這種情況下,我刪除了詳細信息對象的雙引號。現在,您可以將json的city屬性作爲json對象。現在,我們創建一個查詢到達城市:

{ 
    "query": { 
    "bool": { 
     "must": { 
     "term": { 
      "your-json-attribute": "???" 
     } 
     }, 
     "should": [ 
     { 
      "term": { 
      "your-json-attribute": "???" 
      } 
     }, 
     { 
      "term": { 
      "your-json-attribute": "???" 
      } 
     } 
     ] 
    } 
    } 
} 

我用term查詢,但還有很多其他的查詢類型。你可以檢查他們的文件。但對於AndOr,可以使用bool查詢。檢查https://www.elastic.co/guide/en/elasticsearch/reference/2.0/query-dsl-bool-query.html