поиск нескольких точных значений в массиве - PullRequest
0 голосов
/ 04 июля 2018

У меня есть документ, показанный ниже, с ключевым словом 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, чтобы не было конфликта заказов, и сохранить его как строку, поскольку точное совпадение в массиве невозможно)

1 Ответ

0 голосов
/ 05 июля 2018

Если вы хотите получить точное совпадение, вы должны заключить строку поиска в ". Это обеспечит получение точных результатов совпадения.

например:

{
  "name": "test",
  "PCL": [
           "\"product1_company1_location1\"",
           "\"product2_company2_location2\""
         ]
}
...