У меня есть массив данных в поле в ElasticSearch с типом ключевого слова. Я хочу искать в этом массиве эксклюзивные значения, которые я хочу искать, то есть исключать значения массива, которые не включены в мое ключевое слово поиска. Пожалуйста, смотрите детали ниже.
Спасибо!
У меня есть следующее эластичное отображение индекса поиска:
"exgroups": {
"type": "keyword",
"eager_global_ordinals": true
},
Со следующими образцами данных:
"id": 1,
"exgroups": ["TSX"]
"id": 2,
"exgroups": ["TSX", "OTC", "NSD"]
Мой поиск такой:
{
"bool" : {
"filter" : {
"term" : {
"exgroups" : {
"value" : "TSX"
}
}
}
}
}
Я использовал MatchQueryBuilder, TermQueryBuilder, TermsQueryBuilder безрезультатно. По определению ElasticSearch TermQuery это должно сработать. https://www.elastic.co/guide/en/elasticsearch/reference/6.2/query-dsl-term-query.html. Но это не так, вероятно, потому что поле является массивом.
В общем, термин * запрос ведет себя так:
iterate all the documents, for each document
check if the exgroups contains 'tsx'
if it does, return the document
Возвращает документы 1 и 2, поскольку документ 2 также содержит TSX. Тем не менее, я хотел, чтобы он возвратил только документ 1 и ничего другого в массиве.
Как мне это сделать?
Заранее спасибо.