У меня есть документ, показанный ниже, с ключевым словом PCL
{
"name": "test",
"PCL": [
"product1_company1_location1",
"product2_company2_location2"
]
}
Я пытаюсь найти количество всех документов, которые точно соответствуют значениям, указанным в массиве. Тем не менее, в документах с эластичным поиском четко указано, что «точно равно» не существует, поскольку «термин» и «термины» являются «операциями с содержанием», и предлагаемое решение использования счетчика здесь не сработает, поскольку пользователь может иметь столько элементов в массиве.
Я пытался преобразовать поле PCL в строку, разделенную символом, чтобы различать каждый PCL, но если порядок строк не одинаков, например, P1C1L1_P2C2L2 против P2C2L2_P1C1L1, пользователи с одинаковым PCL вряд ли см. другие документы.
Вот запрос, который я пытаюсь обойти
GET indexName/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"PCL": [
"product1_company1_vendor1",
"product2_company2_vendor2"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"terms": {
"PCL": [
"product1_company1_vendor_1",
"product3_company3_vendor_3"
]
}
}
]
}
}
]
}
},
"aggs": {
"PCL": {
"terms": {
"field": "PCL"
}
}
}
}
Есть ли способ достичь этого с помощью Elasticsearch?
(примечание: я решил отсортировать PCL, чтобы не было конфликта заказов, и сохранить его как строку, поскольку точное совпадение в массиве невозможно)