У меня есть следующие отображения:термин фильтр Elasticsearch с несколькими значениями
PUT /files
{
"mappings": {
"file": {
"properties": {
"FileID": {
"type": "integer"
},
"FolderID": {
"type": "integer"
}
}
}
}
}
Мои данные:
PUT /clients/client/1
{
"id":"1",
"name":"Joe Doe",
"FolderIDs":["577173","245340","777035"],
"Emails" : ["[email protected]", "[email protected]"]
}
PUT /files/file/1
{
"FileID": "10550",
"FolderID" : "577173"
}
Мой запрос:
GET /_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"terms": {
"FolderID": {
"index": "clients",
"type": "client",
"id": "1",
"path": "FolderIDs"
}
}
}
}
}
}
Это возвращает файл с идентификатором 10550, отлично. Мой вопрос заключается в том, как это сделать в поле электронной почты со списком электронных писем, например.
отображение:
PUT /emails
{
"mappings": {
"email": {
"properties": {
"EmailID": {
"type": "integer"
},
"ADDRESS_FROM": {
"type": "string",
"index" : "not_analyzed"
}
}
}
}
данные:
PUT /emails/email/1
{
"EmailID": "8335",
"ADDRESS_FROM" : "[email protected] [email protected]"
}
Как создать запрос, который возвращает электронные письма, которые не имеют какой-либо из писем в ADDRESS_FROM из области клиентских сообщений электронной почты?
т.е.
клиент 1 имеет [ "[email protected]", "[email protected]"] так вернуть электронную почту 1, потому что ADDRESS_FROM не содержит клиент 1 сообщения электронной почты ("случайную @ электронную почту. com [email protected] ").
Я пытался что-то похожее на это (не работает):
GET /_search
{
"query": {
"filtered": {
"query": {
"match_all": {}
},
"filter": {
"bool": {
"must_not": [
{
"terms": {
"ADDRESS_FROM": {
"index": "clients",
"type": "client",
"id": "1",
"path": "Emails"
}
}
}
]
}
}
}
Вам нужно два запроса для что –
кто-нибудь может указать мне в правильном направлении? спасибо – stackoverflows
keety решил это с помощью одного запроса, см. принятый ответ ниже. – stackoverflows