Повышение диапазона и термина в Elastic Search

Я изо всех сил пытаюсь сделать так, чтобы повышение работало так, как я хочу, в Elastic Search.

Допустим, у меня есть несколько проиндексированных профилей, содержащих пол, интересы и возраст, и предположим, что я считаю наиболее важным совпадение пола, тогда интерес и наименее важный критерий — это возраст пользователя. Я ожидал, что приведенный ниже запрос приведет к упорядочению соответствующих профилей в соответствии с только что упомянутым принципом, но когда я выполняю его, я сначала получаю несколько мужчин, а затем я получаю женщину Анну в возрасте 50 лет перед женщиной Марией, которая любит автомобили. ... почему Мария не получает более высокий балл, чем Анна??

{
    "query": {
        "bool" : {
            "should" : [
                { "term"  : { "gender" : { "term": "male", "boost": 10.0 } } },
                { "term"  : { "likes"  : { "term": "cars", "boost" : 5.0 } } },
                { "range" : { "age"    : { "from" : 50,    "boost" : 1.0 } } }
            ],
            "minimum_number_should_match" : 1
        }
    }    
}

Мы будем очень признательны за подсказки,

Stine


Вот выполняемые команды curl:

$ curl -XPUT http://localhost:9200/users/profile/1 -d '{
    "nickname" : "bob",
    "gender" : "male",
    "age" : 48,
    "likes" : "airplanes"
}'

$ curl -XPUT http://localhost:9200/users/profile/2 -d '{
    "nickname" : "carlos",
    "gender" : "male",
    "age" : 24,
    "likes" : "food"
}'

$ curl -XPUT http://localhost:9200/users/profile/3 -d '{
    "nickname" : "julio",
    "gender" : "male",
    "age" : 18,
    "likes" : "ladies"
}'

$ curl -XPUT http://localhost:9200/users/profile/4 -d '{
    "nickname" : "maria",
    "gender" : "female",
    "age" : 25,
    "likes" : "cars"
}'

$ curl -XPUT http://localhost:9200/users/profile/5 -d '{
    "nickname" : "anna",
    "gender" : "female",
    "age" : 50,
    "likes" : "clothes"
}'

$ curl -XGET http://localhost:9200/users/profile/_search -d '{
    "query": {
        "bool" : {
            "should" : [
                { "term" : { "gender" : { "term": "male", "boost": 10.0 } } },
                { "term" : { "likes" : { "term": "cars", "boost" : 5.0 } } },
                { "range" : { "age" : { "from" : 50, "boost" : 1.0 } } }
            ],
            "minimum_number_should_match" : 1
        }
    }    
}'
5
задан DrTech 8 June 2012 в 14:04
поделиться