Повышение оценки на основе целочисленного значения - Elasticsearch - PullRequest
0 голосов
/ 23 декабря 2018

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

Это пример документа:

{
    "_index": "links",
    "_type": "db1",
    "_id": "mV32vWcBZsblNn1WqTcN",
    "_score": 8.115617,
    "_source": {
        "url": "example.com",
        "title": "Example website",
        "description": "This is an example website, used for various of examples around the world",
        "likes": 9,
        "popularity": 543,
        "tags": [
            {
                "name": "example",
                "votes": 5
            },
            {
                "name": "test",
                "votes": 2
            },
            {
                "name": "testing",
                "votes": 1
            }
        ]
    }
}

Теперь в этом конкретном поиске акцент делается на tags, и я хотел бы знать, как увеличить _score и умножить его на целое число в votes в tags.

Если это невозможно (или очень трудно достичь), я просто хотел бы знать, как повысить _score на votes (не под tags)

Пример, добавить 0,1 к_score для каждого целого числа в votes

Это текущий поисковый запрос, который я использую (для поиска по тегам только ):

{
    "query": {
        "nested": {
            "path": "tags",
            "query": {
                "bool":{
                    "should":{
                        "match":{
                            "tags.name":"example,testing,something else"
                        }
                    }
                }
            }
        }
    }
}

Я не мог найти много онлайн, и надеюсь, что кто-то может помочь мне.

Как мне увеличить _score с целочисленным значением?


Обновление

Для получения дополнительной информации, вот сопоставление:

{
    "links": {
        "mappings": {
            "db1": {
                "properties": {
                    "url": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "title": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "description": {
                        "type": "text",
                        "fields": {
                            "keyword": {
                                "type": "keyword",
                                "ignore_above": 256
                            }
                        }
                    },
                    "likes": {
                        "type": "long"
                    },
                    "popularity": {
                        "type": "long"
                    },
                    "tags": {
                        "type": "nested",
                        "properties": {
                            "name": {
                                "type": "text",
                                "fields": {
                                    "keyword": {
                                        "type": "keyword",
                                        "ignore_above": 256
                                    }
                                }
                            },
                            "votes": {
                                "type": "long"
                            }
                        }
                    }
                }
            }
        }
    }
}

Обновление 2

Изменено tags.likes / tags.dislikes на tags.votes и добавлено свойство nestedк tags

Ответы [ 2 ]

0 голосов
/ 05 января 2019

Потребовалось много времени, чтобы понять.Я так много узнал на этом пути.

Вот окончательный результат:

{
    "query": {
        "nested": {
            "path": "tags",
            "query": {
                "function_score": {
                    "query": {
                        "bool": {
                            "should": [
                                {
                                    "match": {
                                        "tags.name": "example"
                                    }
                                },
                                {
                                    "match": {
                                        "tags.name": "testing"
                                    }
                                },
                                {
                                    "match": {
                                        "tags.name": "test"
                                    }
                                }
                            ]
                        }
                    },
                    "functions": [
                        {
                            "field_value_factor": {
                                "field": "tags.votes"
                            }
                        }
                    ],
                    "boost_mode": "multiply"
                }
            }
        }
    }
}

Массив в should очень помог, и был рад, что смог скомбинировать его сfunction_score

0 голосов
/ 23 декабря 2018

Вы просматриваете function score query: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html

А field value factor https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-function-score-query.html#function-field-value-factor.

Фрагмент из документации:

GET /_search
{
    "query": {
        "function_score": {
            "field_value_factor": {
                "field": "tags.dislikes",
                "factor": 1.2,
                "modifier": "sqrt",
                "missing": 1
            }
        }
    }
}

Или с script score потому что ваше вложенное поле tags (не уверен, что field value score хорошо работает с вложенной структурой).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...