我正在使用Elasticsearch索引具有所有者的文档,该所有者存储在源对象的userId属性中。我可以轻松地对userId进行构面,并为每个拥有者获取构面,但我希望像这样显示拥有者的构面:

  • 我拥有的文件(X)
  • 他人拥有的文档(Y)

  • 我可以在客户端上处理此问题,并获取elasticsearch返回的所有方面,并仔细研究并找出当前用户拥有的所有方面,而不是适当地显示它们,但是我希望有一种方法可以告诉Elasticsearch处理在查询本身中。

    最佳答案

    您可以使用过滤的构面来执行此操作:

    curl -XGET "http://localhost:9200/_search" -d'
    {
      "query": {
        "match_all": {}
      },
      "facets": {
        "my_docs": {
          "filter": {
            "term": { "user_id": "my_user_id" }
          }
        },
        "others_docs": {
          "filter": {
            "not": {
              "term": { "user_id": "my_user_id" }
            }
          }
        }
      }
    }'
    

    这样做的好处之一是两个terms过滤器是相同的,因此只执行一次。 not过滤器只是反转缓存的term过滤器的结果。

    09-30 21:52