#elasticsearch
#elasticsearch
Вопрос:
Я действительно новичок в эластичном поиске, и теперь заблокирован одной проблемой.
Если я использую GET http://127.0.0.1:9200/index/type/_search , в результате получается
{
"took": 1,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1,
"hits": [
{
"_index": "index",
"_type": "type",
"_id": "AVe3AcpYbUIbMIPUYcZ2",
"_score": 1,
"_source": {
"applications": [
{
"jobs": [
{
"id": 1,
"country": "a"
},
{
"id": 2,
"country": "b"
}
]
},
{
"jobs": [
{
"id": 3,
"country": "c"
},
{
"id": 4,
"country": "d"
}
]
}
]
}
},
{
"_index": "index",
"_type": "type",
"_id": "AVe3cMaPbUIbMIPUYcaS",
"_score": 1,
"_source": {
"applications": [
{
"jobs": [
{
"id": 11,
"country": "aa"
},
{
"id": 2,
"country": "aa"
}
]
},
{
"jobs": [
{
"id": 33,
"country": "aa"
},
{
"id": 44,
"country": "aa"
}
]
}
]
}
},
{
"_index": "index",
"_type": "type",
"_id": "AVe3b1KmbUIbMIPUYcaR",
"_score": 1,
"_source": {
"applications": [
{
"jobs": [
{
"id": 11,
"country": "aa"
},
{
"id": 2,
"country": "bb"
}
]
},
{
"jobs": [
{
"id": 33,
"country": "cc"
},
{
"id": 44,
"country": "d"
}
]
}
]
}
}
]
}
}
я хочу получить одно приложение, в котором каждая job.country в приложении является «aa», поэтому ожидаемый результат
"applications": [
{
"jobs": [
{
"id": 11,
"country": "aa"
},
{
"id": 2,
"country": "aa"
}
]
},
{
"jobs": [
{
"id": 33,
"country": "aa"
},
{
"id": 44,
"country": "aa"
}
]
}
]
Что я пробовал, так это POST http://127.0.0.1:9200/index/type/_search
{
"query": {
"match": {
"applications.jobs.country": "aa"
}
}
}
Но результат
{
"took": 65,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.30685282,
"hits": [
{
"_index": "index",
"_type": "type",
"_id": "AVe3cMaPbUIbMIPUYcaS",
"_score": 0.30685282,
"_source": {
"applications": [
{
"jobs": [
{
"id": 11,
"country": "aa"
},
{
"id": 2,
"country": "aa"
}
]
},
{
"jobs": [
{
"id": 33,
"country": "aa"
},
{
"id": 44,
"country": "aa"
}
]
}
]
}
},
{
"_index": "index",
"_type": "type",
"_id": "AVe3b1KmbUIbMIPUYcaR",
"_score": 0.15342641,
"_source": {
"applications": [
{
"jobs": [
{
"id": 11,
"country": "aa"
},
{
"id": 2,
"country": "bb"
}
]
},
{
"jobs": [
{
"id": 33,
"country": "cc"
},
{
"id": 44,
"country": "d"
}
]
}
]
}
}
]
}
}
Кажется, что если приложение содержит applications.jobs.country, соответствующее требованиям, оно будет возвращено. и я хочу получить каждый элемент в приложениях.задания соответствуют потребностям. кто-нибудь может мне помочь? Спасибо
Ответ №1:
Я использую регулярное выражение для временного решения этой проблемы. СООБЩЕНИЕ http://127.0.0.1:9200/index/type/_search
{
"query": {
"bool": {
"must_not": {
"regexp": {
"applications.jobs.country": "~(.*aa.*)"
}
}
}
}
}
не должно содержать, что applications.jobs.country содержит другие, чем «aa»