Запрос Elasticsearch MLT не возвращает результатов, если не сделать критерии более строгими - PullRequest
0 голосов
/ 11 января 2019

Я отправляю следующий запрос к конечной точке _explain документа с "тремя" в поле заголовка

{
"query": {
    "bool": {
        "must": [
            {
                "bool": {
                    "should": [
                        {
                            "more_like_this": {
                                "min_doc_freq": 1,
                                "fields": [
                                    "title"
                                ],
                                "max_query_terms": 10,
                                "like": "Three Reasons Spice Girls Will Reunite (And Three Why They Won't)",
                                "min_term_freq": 1
                            }
                        },
                        {
                            "more_like_this": {
                                "min_doc_freq": 1,
                                "fields": [
                                    "description"
                                ],
                                "max_query_terms": 10,
                                "like": "Three Reasons Spice Girls Will Reunite (And Three Why They Won't)",
                                "min_term_freq": 1
                            }
                        }
                    ]
                }
            }
        ]
    }
}

}

Ответ / объяснение, которое я получаю:

"matched": false,
"explanation": {
    "value": 0,
    "description": "Failure to meet condition(s) of required/prohibited clause(s)",
    "details": [
        {
            "value": 0,
            "description": "no match on required clause (((title:girl title:and title:why title:will title:thei title:won title:reason title:reunit title:spice title:three)~3) ((description:and description:why description:thei description:won description:girl description:will description:reason description:spice description:reunit description:three)~3))",
            "details": [
                {
                    "value": 0,
                    "description": "No matching clauses",
                    "details": []
                }
            ]
        },
        {
            "value": 0,
            "description": "match on required clause, product of:",
            "details": [
                {
                    "value": 0,
                    "description": "# clause",
                    "details": []
                },
                {
                    "value": 0.023566995,
                    "description": "_type:media, product of:",
                    "details": [
                        {
                            "value": 1,
                            "description": "boost",
                            "details": []
                        },
                        {
                            "value": 0.023566995,
                            "description": "queryNorm",
                            "details": []
                        }
                    ]
                }
            ]
        }
    ]
}

Однако, если я увеличу min_term_freq с 1 до 2, я получу совпадение. Точно так же я получаю совпадение, если удаляю несколько терминов из одинакового запроса, например, «Три причины специи (и три)».

Почему это имеет смысл, что оно будет соответствовать, поскольку критерии становятся более строгими (min_term_freq увеличивается)

1 Ответ

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

imum_should_match по умолчанию равнялся 3, и я не соответствовал критериям. Обновив значение по умолчанию 1, я получил совпадение.

...