Как мне повысить потенциально существующее поле в Elasticsearch? - PullRequest
0 голосов
/ 29 мая 2018

У меня есть несколько индексов Elasticsearch, отображения которых мне неизвестны во время поиска.Я использую следующее, чтобы выполнить И для поиска слов «lorem» и «ipsum»:

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "lorem AND ipsum"
        }
    }
}

Приятно, что поиск выполняется по всем полям в индексах.Теперь у некоторых индексов есть поле с названием «title», и я хочу повысить их, чтобы ранжировать их как более релевантные.Но только если они существуют, конечно.Я попытался поиграться с параметрами предложения «query_string», но единственный способ увеличить поле «title» - это использовать следующий запрос:

GET /_search
{
    "query": {
        "query_string" : {
            "fields": ["title^2"],
            "query" : "lorem AND ipsum"
        }
    }
}

Этозаставляет предложение «query_string» искать только поле «title» и ни одно из других полей - и помните, я не знаю, каковы эти другие поля.Использование подстановочного знака в параметре «default_field» вызовет исключение, только если оно используется вместе с параметром «fields».

Поэтому в основном я хочу сказать Elasticsearch:

Поиск"lorem" и "ipsum" и оцените результат выше, если вы найдете их в поле с названием "title"

Как бы я пошел к достижению чего-то подобного?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

В то время как «field_value_factor» был тупиком, «function_score» привел меня в правильном направлении.Это запрос, который я (в принципе) в итоге использовал:

GET /_search
{
    "query": {
        "function_score": {
            "query": {
                "query_string": {
                    "query": "lorem AND ipsum"
                }
            },
            "functions": [
                {
                    "filter": {
                        "query_string": {
                            "fields": ["name"],
                            "query": "lorem AND ipsum"
                        }
                    },
                    "weight": 2
                }
            ]
        }
    }
}

Он будет искать во всех полях во всех индексах слова "lorem" и "ipsum" и удваивать оценку поискового хита, если теоба слова были найдены в поле «имя».

0 голосов
/ 29 мая 2018

Я думаю, что вы ищете function_score

GET /_search
{
    "query": {
        "function_score": {
            "field_value_factor": {
                "field": "title",
                "factor": "2",
                "modifier": "multiply",
                "missing": 1
            }
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...