2013-04-16 4 views
4

Я использую поиск elasticsearch двигателя и при запуске кода ниже, возвращаемые результаты не соответствуют критериям диапазона (я получаю пункты с опубликованной даты ниже требуемого предела):Range фильтр не работает

#!/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" 
      } 
     } 
    } 

} 

' 

Я также попытался поставить предложение диапазона в обязательном порядке, внутри запроса bool, но результаты были одинаковыми.

Редактировать: Я использую поиск elastics для поиска в mongodb через плавательный бассейн реки. Это сценарий, я побежал искать MongoDB дб с ES:

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

Кроме этого, я не создавал еще индексов.

Edit 2:

Вид отображений эс:

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

published: { 
    type: "string" 
} 
+1

- это поле 'опубликовано ', индексированное как дата? Можете ли вы разместить свое текущее сопоставление? – javanna

+0

Я отредактировал сообщение, чтобы ответить на ваш вопрос. – Rod0n

ответ

2

Причина в вашем отображении. Опубликованное поле, которое вы используете в качестве даты, индексируется как строка. Вероятно, это связано с тем, что используемый вами date format не является стандартным для elasticsearch, поэтому тип поля не определяется автоматически и индексируется как простая строка.

Вы должны изменить свое сопоставление, используя put mapping api. Вам нужно определить опубликованное поле как дату там, указав формат, который вы используете (может быть более одного), и переиндексировать свои данные.

После этого ваш фильтр диапазона должен работать!

Смежные вопросы