Я работаю над медицинским проектом, где у меня есть несколько вопросов вместе с темами, прилагаемыми к ним. Проблема в том, что следующий код работает нормально, но он не учитывает фильтр «must_not», тогда как он отлично работает с предложением «must». Помогите мне с этим.Elasticsearch must_not не работает с предложением фильтра
GET stopdata/_search
{
"query": {
"function_score": {
"query": {
"filtered": {
"query": {
"match": {
"question": "Hello Dr. Iam suffering from fever with cough nd cold since 3 days"
}
}
}
},
"filter": {
"bool": {
"must": [
{
"terms": {
"topics": [
"fever",
"cough"
]
}
}
],
"must_not": [
{
"terms": {
"topics": [
"children",
"child",
"childrens health"
]
}
}
]
}
},
"random_score": {}
}
},
"highlight": {
"fields": {
"keyword": {}
}
}
}
Кроме того, мне нужно преобразовать код в Java, который я пытаюсь, но придерживался следующего кода.
Set<String> mustNot = new HashSet<String>();
mustNot.add("child");
mustNot.add("children");
mustNot.add("childrens health");
Set<String> must = new HashSet<String>();
must.add("fever");
must.add("cough");
FunctionScoreQueryBuilder fsqb = new FunctionScoreQueryBuilder(QueryBuilders.matchQuery("question", "Hello Dr. Iam suffering from fever with cough nd cold since 3 days"));
fsqb.add(ScoreFunctionBuilders.randomFunction((new Date()).getTime()));
BoolQueryBuilder bqb = boolQuery()
.mustNot(termsQuery("topics", mustNot));
SearchResponse response1 = client.prepareSearch("stopdata")
.setQuery(fsqb)
.execute()
.actionGet();
System.out.println(response1.getHits().getTotalHits());
Отображение проиндексирует «stopdata» как следовать
{
"stopdata": {
"mappings": {
"questions": {
"properties": {
"answers": {
"type": "string"
},
"id": {
"type": "long"
},
"question": {
"type": "string",
"analyzer": "my_english"
},
"relevantQuestions": {
"type": "long"
},
"topics": {
"type": "string"
}
}
}
}
}
}
Добавление выборочных данных для указанного выше показателя
"question": "My son of age 8 months is suffering from cough and cold and fever. What treatment I have to follow?"
"topics": [
"Cough",
"Fever",
"Hydration",
"Nutrition",
"Tens",
"Childrens health"
]
"question": "Hi.My daughter, 4 years old , has on and of fever with severe coughing and colds for 3 days now.She vomited as well last night.Do you think it's viral?"
"topics": [
"Vomiting",
"Flu",
"Cough",
"Fever",
"Pneumonia",
"Meningitis",
"Tamiflu",
"Incision",
"Childrens health",
"Oseltamivir"
]
"question": "If you have a fever of 101 with chills and sweats for 2 day with a slight cough, should you go to the drs or let is wear off?"
"topics": [
"Cough",
"Fever"
]
Я до сих пор получаю результаты по темам «здоровье детей», нет изменений в результате, как вы предложили. – JDpawar
Я просто фиксировал 1) семантическую проблему в вашем запросе и 2) помогал вам создавать эквивалент Java. В конце концов, то, что соответствует, зависит от ваших данных и того, как выглядит ваше сопоставление для поля 'themes', не стесняйтесь делиться дополнительной информацией об этом. – Val
Благодарим вас за помощь Val. Я добавил отображение и образцы данных. Кроме того, я получаю ошибку в 'FilteredQueryBuilder fqb = QueryBuilders.filteredQuery (запрос, фильтр);' ''Метод filterQuery (QueryBuilder, FilterBuilder) в типе QueryBuilders не применим для аргументов (MatchQueryBuilder, BoolQueryBuilder)'' – JDpawar