У меня есть запрос ElasticSearch, который выглядит следующим образом:
{
"query": {
"query_string": {
"query": "Lorem*",
"fields": ["search_names", "name^2"]
}
}
}
Для документов, которые выглядят так.
{
"member_name" : "Lorem Ipsum",
"complaint_periods" : [
{
"period": "01/01/2001 - 31/12/2001",
"complaints": "10"
},
{
"period": "01/01/2002 - 31/12/2002",
"complaints": "0"
},
{
"period": "01/01/2003 - 31/12/2003",
"complaints": "3"
},
{
"period": "01/01/2004 - 31/12/2004",
"complaints": "100"
}
],
"search_names" : [
"Lorem Ipsum",
"dolor sit amet",
"varius augue",
"Aliquam fringilla"
]
}
Таким образом, я могу получать документы, основываясь на том, насколько близко их имя и имена для поиска к моему запросу.
Требование заключается в том, что текстовое поле поиска должно извлекать наиболее близкое имя, совпадающее с запросом, однако при относительно схожих именах документ с числом жалоб выше порогового значения 10 за прошедший период времени должен появляются в результатах поиска выше, чем те, у которых меньше 10.
Поэтому мне нужно передать ключ для периода времени, например, "01/01/2001 - 31/12/2001", и повысить документы оценка, если значение жалобы за этот период> 10.
Текущее отображение индекса выглядит следующим образом.
"mappings": {
"properties": {
"member_name": {
"type": "text"
},
"search_names": {
"type": "text"
},
"complaint_periods": {
"type": "nested",
"properties": {
"period": {
"type": "text",
},
"complaints": {
"type": "integer"
}
}
}
}
}
В настоящее время я читаю Вложенные запросы как возможное решение ... но я довольно свободен sh для ES, поэтому очень хочу получить мнения о типах запросов / структуре, которыми я должен быть используя для этого.
Есть совет?
Спасибо.