在数组中查找多个精确值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在数组中查找多个精确值相关的知识,希望对你有一定的参考价值。

我有一个如下所示的文档,其中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进行排序,因此没有订单冲突并将其存储为字符串,因为数组内的完全匹配是不可能的)

答案

如果要获得完全匹配,则必须将搜索字符串括在"中。这将确保检索完全匹配结果。

例如:

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

以上是关于在数组中查找多个精确值的主要内容,如果未能解决你的问题,请参考以下文章

如何创建片段以重复变量编号中的代码行

在 numpy 数组中查找多个值的行索引

在javascript中的数组中查找多个最小值的索引

从多个值列表中查找所有不冲突的值组合

在数组中查找局部最小值

当项目有中多个线程,如何查找死锁?