Самый простой вопрос, который приходит на ум:
{
"_source": "blog_id",
"query": {
"bool": {
"must": [
{
"match": {
"article_text": "xyz"
}
},
{
"range": {
"timestamp": {
"gte": "now-30d"
}
}
}
]
}
}
}
nested
объекты, скорее всего, ничего не упростят - наоборот.
Можно ли превратить его в отчет Kibana?
Конечно. Просто примените фильтры либо в KQL (Kib. Query lang), либо с помощью раскрывающихся списков и выберите метрику c, которую вы хотите отслеживать (общее количество blog_id, частота таймсерий и т. Д. c.)
РЕДАКТИРОВАТЬ количество вхождений: я знаю 2 способа:
есть API term_vector
, который дает вам информацию о частоте слов , но это автономный API и не может использоваться во время запроса.
Тогда есть подход на основе сценария , при котором вы просматриваете весь текст статьи, трактуйте это как ключевое слово с учетом регистра, и подсчитать количество подстрок, тем самым исключив статьи с недостаточной частотой слов. Обратите внимание, что вам не обязательно использовать function_score
, как я, - подойдет простой script query
. это может занять нетривиальное количество времени, если у вас есть нетривиальное количество документов.
В вашем случае это может выглядеть так:
{
"query": {
"bool": {
"must": [
{
"script": {
"script": {
"source": """
def word = 'xyz';
def docval = doc['article_text.keyword'].value;
String temp = docval.replace(word, "");
def no_of_occurences = ((docval.length() - temp.length()) / word.length());
return no_of_occurences >= 2;
"""
}
}
}
]
}
}
}