2013-04-14 33 views
0

我在ElasticSearch以下映射:ElasticSearch查詢搜索信息並限制節點ID

{ 
    "xenforo" : { 
    "post" : { 
     "_source" : { 
     "enabled" : false 
     }, 
     "properties" : { 
     "date" : { 
      "type" : "long", 
      "store" : "yes" 
     }, 
     "discussion_id" : { 
      "type" : "long", 
      "store" : "yes" 
     }, 
     "message" : { 
      "type" : "string" 
     }, 
     "node" : { 
      "type" : "long" 
     }, 
     "thread" : { 
      "type" : "long" 
     }, 
     "title" : { 
      "type" : "string" 
     }, 
     "user" : { 
      "type" : "long", 
      "store" : "yes" 
     } 
     } 
    }, 

我想搜索的信息字段中單詞測試,但限制它的節點ID 5.我會怎樣修改此DSL搜索?

$data_string = '{ 
"from" : 0, "size" : 100, 
"sort" : [ 
    { "date" : {"order" : "desc"} } 
], 
"query": { 
     "match" : { 
      "message" : { 
       "query" : "test" 
      } 
     } 
    } 
}'; 

非常感謝您的協助。

回答

1

您可以使用filtered查詢:

{ 
    "from": 0, 
    "size": 100, 
    "sort": [{ 
    "date": { 
     "order": "desc" 
    } 
    }], 
    "query": { 
    "filtered": { 
     "query": { 
     "match": { 
      "message": { 
      "query": "test" 
      } 
     } 
     }, 
     "filter": { 
     "term": { 
      "node": 5 
     } 
     } 
    } 
    } 
} 
+0

這一工程完美!謝謝imotov,非常感謝您的幫助。 –

+0

還有一個問題。如果我想使用相同的過濾查詢,但允許任何數字的節點,有沒有我可以放置的值,而不是5.例如「not null」? –

+0

[存在](http://www.elasticsearch.org/guide/reference/query-dsl/exists-filter/)過濾器能爲你工作嗎? – imotov