在Elasticsearch中查询此字段的最佳方法是什么

时间:2016-08-15 16:27:18

标签: java elasticsearch binary

因此,我在elasticsearch索引中有一个字段,通过一个包含多达四个二进制值的简单字符串字段来指示用户所属的组:

  

11 =第1组& 2

     

0001 =第4组

     

101 =第1组& 3

     

....你明白了

现在,我有一个允许用户输入搜索字段的UI,并且可以添加多个组,例如:

第3组 - 这将等同于以下可能性:

  

001 0011 011 0111 101 1011 111 1111

第2组& 3 - 这些可能性:

  

011 0111 111 1111

正如您所看到的,当用户进入某个群组时,并不意味着该群组独占,而是用户至少获得了搜索群组成员。

现在我正在尝试在java中构建JSON查询,以了解如何最好地查询它。目前,以前的开发人员编写了一个非常低效的java方法,它为每种可能性创建了一个匹配语句。它产生了这个:

GET /_search
{
  "query": {
    "bool": {
      "must": [
        { "match": { "scp":  "001" }},
        { "match": { "scp": "0011"   }}..etc
      ]
    }
  }
}

但是我应该澄清一下,我正在努力改进的不仅仅是弹性搜索查询,而是如何用Java编写它而没有针对每种可能性的巨大IF语句。

1 个答案:

答案 0 :(得分:0)

您可以尝试terms查询:

{
  "query" : {
    "bool" : {
      "filter" : {
        "terms" : {
          "scp" : [001, 0011, ...]
        }
      }
    }
  }
}