0
Мне нужно написать очень сложный запрос в Elastic Search.искаженный запрос в упругом поиске
Запроса хранится в виде строки, query
, и идея заключается в том, чтобы сделать «Ий» матч на полях title
и content
, но затем придать особый вес для таких слов, как «Java» или «питон».
Моя попытка сделать это
{
"fields": ["title","content","id"],
"query": {
"function_score": {
"query":
{
"bool":
{
"should":
[
{"match": {"title": {"query": query, "boost": 15}}},
{"match": {"content": {"query": query, "boost": 9}}}
]
}
}
},
"functions": [
{
"filter": {
"match": {
"title": "java"
}},
"weight": 2 },
{
"filter": {
"match": {
"title": "python"
}},
"weight": 2 }
],
"boost_mode": "multiply"
}
}
Но я получаю сообщение об ошибке, говорящее о том, что запрос имеет неверный формат. Простите, если это наивные вопросы, но я не знаю, куда еще обратиться.
спасибо! этот запрос действительно работает. – Brian
Я вижу, что если я не использую никаких фильтров (т. Е. «Фильтры»: []), я получаю те же результаты, но разные оценки, а затем при использовании части под «bool» в обычном запросе. Ты знаешь почему? – Brian
Ну, конечно, в этом все эти фильтры. Из документов, которые соответствуют запросу, те, которые соответствуют фильтрам, будут иметь разные оценки, в соответствии с этой конкретной функцией (в вашем случае функция 'weight'). '" boost_mode ":" multiply "и' weight: 2' означает, что документы, которые 'title' соответствуют' java' или 'python', будут иметь нормальный балл, созданный запросом, умноженным на значение' weight'. –