【问题标题】:How to request a single document by _id via alias?如何通过别名通过_id请求单个文档?
【发布时间】:2015-03-12 11:45:00
【问题描述】:

如果别名中所有索引中的所有键都是唯一的(这是外部保证),是否可以通过查询别名来通过其 id 请求单个文档?

【问题讨论】:

    标签: elasticsearch elasticsearch-query


    【解决方案1】:

    从 Elasticsearch 5.1 开始,查询看起来像:

    GET /my_alias_name/_search/
    {
        "query": { 
            "bool": {
             "filter": {
                    "term": {
                       "_id": "AUwNrOZsm6BwwrmnodbW"
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      是的,查询跨越多个索引的别名与查询一个索引的工作方式相同。

      只需对别名执行此查询:

      POST my_alias_name/_search
      {
          "filter":{
              "term":{"_id": "AUwNrOZsm6BwwrmnodbW"}
          }
      }
      

      编辑:GET 操作不是真正的搜索,不能对跨越多个索引的别名执行。所以下面的查询实际上是不允许的:

      GET my_alias_name/my_type/AUwNrOZsm6BwwrmnodbW
      

      【讨论】:

      • 上面写着{ "error" : "ElasticsearchIllegalArgumentException[Alias [data] has more than one indices associated with it [[data_2014-05-31, data_2014-06-26]], can't execute a single index op]", "status" : 400 }
      • 即使有第二个请求?
      • 第二个有效,谢谢。虽然有点慢。
      【解决方案3】:

      7.2 version Docs建议:

      GET /_search
      {
          "query": {
              "ids" : {
                  "values" : ["1", "4", "100"]
              }
          }
      }
      

      响应应如下所示:

      {
        "took": 0,
        "timed_out": false,
        "_shards": {
          "total": 2,
          "successful": 2,
          "skipped": 0,
          "failed": 0
        },
        "hits": {
          "total": {
            "value": 1,
            "relation": "eq"
          },
          "max_score": 1.0,
          "hits": [
            {
              "_index": "indexwhatever",
              "_type": "_doc",
              "_id": "anyID",
              "_score": 1.0,
              "_source": {
                "field1": "value1",
                "field2": "value2"
              }
            }
          ]
        }
      }
      

      【讨论】:

        【解决方案4】:

        如果您想使用 curl 查找具有某些内部 id 的文档:

        curl -X GET 'localhost:9200/_search?q=id:42&pretty'
        

        【讨论】:

          猜你喜欢
          • 2011-01-15
          • 2020-11-27
          • 1970-01-01
          • 1970-01-01
          • 2020-02-07
          • 2021-07-02
          • 2020-03-14
          • 2015-11-08
          • 1970-01-01
          相关资源
          最近更新 更多