2013-04-16 50 views
4

我使用elasticsearch搜索引擎,當我運行下面的代碼,返回的結果不符合標準的範圍內(我得到低於期望的極限公佈日期的項目):範圍過濾器不工作

#!/bin/bash 
curl -X GET 'http://localhost:9200/newsidx/news/_search?pretty' -d '{ 

    "fields": [ 
     "art_text", 
     "title", 
     "published", 
     "category" 
    ], 
    "query": { 
     "bool": { 

      "should": [ 
       { 
        "fuzzy": {"art_text": {"boost": 89, "value": "google" }} 
       }, 
       { 
        "fuzzy": {"art_text": {"boost": 75, "value": "twitter" }} 
       } 
      ], 
      "minimum_number_should_match": 1 
     } 
    }, 
    "filter" : { 
     "range" : { 
      "published" : { 
       "from" : "2013-04-12 00:00:00" 
      } 
     } 
    } 

} 

' 

我也嘗試把範圍子句放在一個必須的,在布爾查詢中,但結果是一樣的。

編輯:我使用elasticsearch通過河流插件在mongodb中搜索。這是我用ES搜索mongodb db的腳本:

#!/bin/bash 
curl -X PUT localhost:9200/_river/mongodb/_meta -d '{ 
     "type":"mongodb", 
     "mongodb": { 
       "db": "newsful", 
       "collection": "news" 
     }, 
    "index": { 
      "name": "newsidx", 
     "type": "news" 
    } 
}' 

除此之外,我沒有創建其他索引。

編輯2:

視圖到ES映射:

http://localhost:9200/newsidx/news/_mapping 

published: { 
    type: "string" 
} 
+1

是您的'發佈'字段索引爲日期?你可以發佈你目前的地圖嗎? – javanna

+0

我編輯帖子爲了回答你的問題。 – Rod0n

回答

2

原因是在映射。您用作日期的已發佈字段將被索引爲一個字符串。這可能是因爲您使用的date format不是elasticsearch中的默認設置,因此字段類型不會自動檢測到,並且它被編入索引爲簡單字符串。

您應該使用put mapping api更改您的映射。您需要將發佈的字段定義爲日期,指定您使用的格式(可以是多個)並重新索引數據。

之後,你的範圍過濾器應該工作!