Elasticsearch - 查询构建 - 这是正确的方法吗?

时间:2016-09-23 06:30:23

标签: elasticsearch

我有一个看起来像这样的文件:

{
  "foo": {
    "orgnr": "1"
  },
  "bar": {
    "orgnr" : "2"
  },
  "created": "2015-02-12",
  ...  
}

我有一个API,用户可以在其中查询:

  • orgnr(必填)
  • role(可选) - ANY默认情况下ANY表示必须至少匹配bar.orgnr或foo.orgnr中的一个,但也可以是role:BAR,然后它必须匹配bar.orgnr:
  • 已创建(可选)
  • 查询(可选)

Orgnr 必须匹配 foo.orgnr或bar.orgnr,然后可以进行大量其他字段和文本查询。我匹配这个查询字符串查询。因此,对于orgnr为1的请求,将生成以下查询字符串:

  

(foo.orgnr:1 OR bar.orgnr:1)AND(查询的其余部分)

其他查询可以是例如

  • 创建:[2015-01-01 TO *]
  • 已创建:[2015-01-01 TO *] AND * query *

但我不确定这实际上是正确的方法还是这样做。阅读https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html让我感到不安全。 我也可以使用布尔匹配,必须为orgnr。

使用角色:BAR将生成以下查询:

  

(bar.orgnr:1)AND(查询的其余部分)

这里最重要的是orgnr实际上与foo OR bar orgnr相匹配 或者我应该使用过滤器吗?

1 个答案:

答案 0 :(得分:1)

bool query in filter context是一种很好的方式。 The should至少需要一个匹配的子句。

POST _search
{
   "query": {
      "constant_score": {
         "filter": {
            "bool": {
               "should": [
                  {
                     "term": {
                        "foo.orgnr": "1"
                     }
                  },
                  {
                     "term": {
                        "bar.orgnr": "1"
                     }
                  }
               ]
            }
         }
      }
   }
}