Elasticsearch匹配完整的术语数组 - java

我需要将一系列完整的术语与elasticsearch匹配。
仅应返回具有相同元素数组的文档。
文档数组中不应再有元素或元素子集。
元素的顺序无关紧要。

例:

 filter:
   id: ["a", "b"]

 documents:  
   id: ["a", "b"] -> match  
   id: ["b", "a"] -> match  
   id: ["a"] -> no match  
   id: ["a", "b", "c"] -> no match  

最终,我想使用Java High Level REST Client来实现查询,尽管也可以使用elasticsearch dsl的示例。

参考方案

虽然本机上似乎不支持此功能,但是您可以继续使用脚本过滤器来实现此行为,如下所示:

GET your_index/_search
{
  "query": {
    "bool": {
      "must": [
        {
          "script": {
            "script": "doc['tags'].values.length == 2"
          }
        },
        {
          "term": {
            "tags": {
              "value": "a"
            }
          }
        },
        {
          "term": {
            "tags": {
              "value": "b"
            }
          }
        }
      ]
    }
  }
}

脚本过滤器通过数组大小限制搜索结果,而术语过滤器指定该数组的值。确保在标签字段上启用fielddata以便在其上执行脚本。

Elasticsearch-如何使用Java在JSON对象中添加或编辑字符串数组? - java

我在Java中分别具有用户ID,名称和类型变量,如int,string和arraylist。我想像这样将其插入Elasticsearch数据库中:users { "userid": 5, "name": "test", "type": ["U1", "…

Java-搜索字符串数组中的字符串 - java

在Java中,我们是否有任何方法可以发现特定字符串是字符串数组的一部分。我可以避免出现一个循环。例如String [] array = {"AA","BB","CC" }; string x = "BB" 我想要一个if (some condition to tell wheth…

Java RegEx中的单词边界\ b - java

我在使用\b作为Java Regex中的单词定界符时遇到困难。对于text = "/* sql statement */ INSERT INTO someTable"; Pattern.compile("(?i)\binsert\b");找不到匹配项Pattern insPtrn = Pattern.compile(&…

Java Double与BigDecimal - java

我正在查看一些使用双精度变量来存储(360-359.9998779296875)结果为0.0001220703125的代码。 double变量将其存储为-1.220703125E-4。当我使用BigDecimal时,其存储为0.0001220703125。为什么将它双重存储为-1.220703125E-4? 参考方案 我不会在这里提及精度问题,而只会提及数字…

使用R包的弹性搜索客户端 - java

我正在使用elastic search作为数据存储。在我的项目中,我需要使用elastic search分析R数据。在java中,我使用es客户端执行了这些操作。但是我在R中找不到任何支持elastic search操作的软件包。我已经尝试过使用RCurl软件包,例如:count <- fromJSON(getURL("http://loca…