Я изо всех сил пытаюсь сделать так, чтобы повышение работало так, как я хочу, в 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
}
}
}'