Я пытаюсь найти решение того, как я должен структурировать свои запросы для поиска ответов на вопросы людей. Например, на основе набора данных, который я вставлю в конце этого поста, я хотел бы запросить «Шоу о романтике» и, возможно, получить такие результаты:
{
"hits": [
{
"_score": "31",
"_source": {
"anime": "Grisaia no Kajitsu"
}
},
{
"_score": "12",
"_source": {
"anime": "Mirai Nikki"
}
},
{
"_score": "7",
"_source": {
"anime": "Bakemonogatari"
}
}
]
}
Grisaia no Kajitsu показывается как первый результат, потому что он показан в нескольких соответствующих вопросах, а Mirai Nikki занимает второе место, потому что у него более высокий балл, чем у Bakemonogatari.
По сути, я хотел бы получить ответы, соответствующие полям question
, score
и tags
. Вопросы, на которые есть повторяющиеся ответы, должны иметь более высокий балл. Какие-либо предложения?
Мой набор данных:
[
{
"question": "Looking for romance anime",
"score": 4,
"answers": [
{
"anime": "Mirai Nikki",
"score": 8,
"tags": ["action", "adventure", "death game", "romance"]
},
{
"anime": "Bakemonogatari",
"score": 3,
"tags": ["action", "comedy", "romance", "seinen"]
}
]
},
{
"question": "Survival Anime",
"score": 10,
"answers": [
{
"anime": "Grisaia no Kajitsu",
"score": 4,
"tags": ["school", "drama", "survival", "romance"]
},
{
"anime": "Kanata no Astra",
"score": 7,
"tags": ["action", "comedy", "drama", "space"]
}
]
},
{
"question": "Horror and romance anime?",
"score": 12,
"answers": [
{
"anime": "Grisaia no Kajitsu",
"score": 15,
"tags": ["school", "drama", "survival", "romance"]
}
]
}
]
Это должно работать для вас, вы можете настроить различные параметры повышения здесь и посмотреть, как это повлияет на ваши результаты.
{
"_source": ["answers.anime"],
"query": {
"bool": {
"should": [
{
"term": {
"answers.tags": {
"value": "Shows about romance",
"boost": 2 //weight of tags field
}
}
},
{
"match": {
"question": {
"query": "Shows about romance",
"boost": 2 //weight of question field
}
}
},
{
"function_score": {
"min_score": 0.9,
"functions": [
{
"field_value_factor": {
"factor": 1, //weight of score field
"field": "answers.score",
"modifier": "log2p"
}
}
]
}
}
]
}
}
}
Кроме того, по моему опыту, лучше иметь поле, которое вы ищете (аниме здесь), в качестве объекта верхнего уровня в вашей схеме, т.е. - создать новую схему, в отличие от здесь, вам нужно будет отфильтровать имя аниме из вопрос- >название->аниме, также, возможно, придется беспокоиться о дубликатах
Большое спасибо! Должен ли термин запрос быть
answers.tags
? Также возможно ли просто получитьanswer.anime
вместо всего источника?