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

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

我有一个API,用户可以在其中查询:
  • orgnr(必需)
  • 角色(可选)-默认情况下为ANY意味着必须至少匹配bar.orgnr或foo.orgnr中的一个,但也可以是role:BAR,然后它必须匹配bar.orgnr:
  • 已创建(可选)
  • 查询(可选)

  • Orgnr 必须与 foo.orgnr或bar.orgnr匹配,然后才能进行很多其他字段和文本查询。我匹配此查询字符串查询。因此,对于orgnr为1的请求,将生成以下查询字符串:



    例如,其余查询可以在哪里
  • 创建:[2015-01-01 TO *]
  • 创建:[2015-01-01 TO *] AND * query *

  • 但是我不确定这实际上是正确的方法还是这样做。读https://www.elastic.co/guide/en/elasticsearch/guide/current/_queries_and_filters.html使我不安全。
    我也可以使用 bool(boolean) 型匹配,对于orgnr必须使用。

    使用role:BAR将生成以下查询:



    这里最重要的是orgnr实际上与foo OR bar orgnr相匹配。
    还是应该为此使用过滤器?

    最佳答案

    bool query in filter context是执行此操作的一种好方法。应该至少需要一个子句才能匹配。

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

    关于elasticsearch - Elasticsearch-查询构建-这是正确的方法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39654030/

    10-10 14:09