#elasticsearch #dsl
#elasticsearch #dsl
Вопрос:
-
Мне нужно выполнить поиск большего веса, чтобы professor.name
-
Затем следующий атрибут для получения веса — professor.email
-
Проверка других полей, в которых есть строка поиска, ниже приведены примеры данных в elasticsearch
PUT /data/test/1 { "id": "Accounting 101", "room": "E3", "professor": { "name": "Thomas Baszo", "email": "baszot@onuni.com" }, "students_enrolled": 27, "course_description": " financial statements" } PUT /data/test/2 { "name": "Accounting 101", "room": "E3", "professor": { "name": "Sachin Baszo", "email": "baszot@onuni.com" }, "students_enrolled": 27, "course_description": "Thomas Thomas Thomas Thomas " } PUT /data/test/3 { "name": "Accounting 101", "room": "E3", "professor": { "name": "Sachin Baszo", "email": "Thomas@onuni.com" }, "students_enrolled": 27, "course_description": "Nothing" }
Ниже приведен запрос
ПОЛУЧИТЬ /_search
{"from" : 0, "size" : 100,"query": {"match_all": {}}})
Как реализовать "fields": [ "professor.name^16", "professor.email^8"]
Ответ №1:
Вы можете использовать сборку запроса multi_match на основе запроса match, чтобы разрешить запросы с несколькими полями:
Поисковый запрос:
{
"query": {
"multi_match" : {
"query" : "thomas",
"fields" : [ "professor.name^16", "professor.email^8"]
}
}
}
Результат поиска:
"hits": [
{
"_index": "stof_64275333",
"_type": "_doc",
"_id": "1",
"_score": 15.693266,
"_source": {
"id": "Accounting 101",
"room": "E3",
"professor": {
"name": "Thomas Baszo",
"email": "baszot@onuni.com"
},
"students_enrolled": 27,
"course_description": " financial statements"
}
},
{
"_index": "stof_64275333",
"_type": "_doc",
"_id": "3",
"_score": 7.846633,
"_source": {
"name": "Accounting 101",
"room": "E3",
"professor": {
"name": "Sachin Baszo",
"email": "Thomas@onuni.com"
},
"students_enrolled": 27,
"course_description": "Nothing"
}
}
]