#elasticsearch #boost #elasticsearch-query
#elasticsearch #повышение #elasticsearch-запрос
Вопрос:
Если мы ищем «Падма Прия» и есть ли точное совпадение, тогда нам нужно сначала показать этот результат, но происходит то, что сначала отображаются сообщения «Падма» только из-за плотности и веса ключевых слов.
Если нет «Padma Priya», то мы хотим показать результаты «Padma» и «Priya» в соответствии с плотностью и весом ключевых слов.
Если мы нашли ключевое слово «Падма Прия» как в тексте, так и в URL, тогда нам нужно придать высокий приоритет URL, а затем заголовку после содержимого страницы.
Это мой запрос:
{
searchBody = {
"from" : 0,
"size" : size,
"query": {
"bool": {
"should" : [
{
"match": {
"location": {
"query": q,
// "boost": 5
}
}
},
{
"match": {
"title": {
"query": q,
"boost": 5
}
}
}
,
{
"match": {
"description": {
"query": q
}
}
}
]
}
}
};
}
Комментарии:
1. @ не могли бы вы добавить свое сопоставление индексов, примеры документов, ваш поисковый запрос, чтобы я мог использовать это для предоставления правильного запроса?
Ответ №1:
Как показано в ES boost doc first query, вы можете увидеть, как придать вашим title
полям больший импульс / приоритет, чем содержимому страницы, что является очень распространенным вариантом использования.
{
"mappings": {
"properties": {
"title": {
"type": "text",
"boost": 2 ---> note this same text will get twice priority/boost if found in title field.
},
"content": {
"type": "text"
}
}
}
}
для вашего первого варианта использования, если мы ищем «Падма Прия» и есть ли точное совпадение, вам нужно объединить запрос фразы с вашим существующим запросом, чтобы получить результат вверху.
Концепция будет понятна на примере ниже:
Образец документа с индексом, индекс будет создан автоматически.
{
"title" : "Padma is the author of post",
"content" : "If we search for Padma and is there any exact match then we need to show that result first but what happening is It's showing Padma posts first only because of keyword density and weightage."
}
Проиндексируйте другой документ, который содержит padam priya
фразу:
{
"title" : "Padma Priya",
"content" : "If we search for Padma and is there any exact match then we need to show that result first but what happening is It's showing Padma posts first only because of keyword density and weightage."
}
Поисковый запрос
{
"query": {
"bool": {
"should": [
{
"multi_match": {
"query": "Padma Priya",
"fields": [
"title^3", --> this will give 3X priority of title field
"content"
]
}
},
{
"match_phrase": {
"title": "Padma Priya"
}
}
]
}
}
}
И результат поиска
"hits": [
{
"_index": "indexboost",
"_type": "_doc",
"_id": "1",
"_score": 1.8336343, // note high score for exact match
"_source": {
"title": "Padma Priya",
"content": "If we search for Padma and is there any exact match then we need to show that result first but what happening is It's showing Padma posts first only because of keyword density and weightage."
}
},
{
"_index": "indexboost",
"_type": "_doc",
"_id": "2",
"_score": 0.9081677,
"_source": {
"title": "Padma is the author of post",
"content": "If we search for Padma and is there any exact match then we need to show that result first but what happening is It's showing Padma posts first only because of keyword density and weightage."
}
}
]
Комментарии:
1. Я поделился своим сценарием, не могли бы вы помочь
2. @PadmaLakshmi ваш запрос — это всего лишь пример, я полагаю, и в чем проблема, с которой вы столкнулись? у вас была возможность попробовать полный пример, который я привел в своем ответе 🙂
3. пробовал, но не работает, можем ли мы нанять вас лично?