Range filter not working

Refresh

December 2018

Views

3.8k time

4

I'm using the elasticsearch search engine and when I run the code below, the results returned doesn't match the range criteria(I get items with published date below the desired limit):

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

}

'

I also tried putting the range clause in a must one, inside the bool query, but the results were the same.

Edit: I use elasticsearch to search in a mongodb through a river plugin. This is the script I ran to search the mongodb db with ES:

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

Besides this, I didn't create another indexes.

Edit 2:

A view to the es mappings:

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

published: {
    type: "string"
}

1 answers

2

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

Вы должны изменить свое отображение с помощью отображения положить апи . Вы должны определить , опубликованное поле даты там, указав формат , который вы используете (может быть больше , чем один) и индексировать данные.

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