弹性搜索查询字符串请求

时间:2018-03-09 09:48:43

标签: android elasticsearch

我在Android应用程序中使用弹性搜索。我在查询字符串中传递过滤器,如下所示:

URL/IndexName/TypeName/_search?sort=registry_date:desc&from=0&size=10&q=firstname:رشید

工作正常。但我想在firstname字段上应用前缀过滤器,以通过查询字符串实现以下内容:

{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "firstname.keyword": "رشید"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 10,
  "sort": [
    {
      "registry_date": {
        "order": "desc"
      }
    }
  ],
  "aggs": {}
}

任何帮助?

1 个答案:

答案 0 :(得分:1)

我现在找不到我发现这个的地方,但对我来说(在Elasticsearch版本5.4上)的工作原理如下:

URL/IndexName/TypeName/_search?source=PLACE_JSON_HERE

其中PLACE_JSON_HERE可以是您作为POST正文传递的整个JSON。

例如:

URL/IndexName/TypeName/_search?source={"query":{"match_all":{}}}

将返回所有文件。

在您的情况下,您甚至可以将PLACE_JSON_HERE替换为:

{
  "query": {
    "bool": {
      "must": [
        {
          "prefix": {
            "firstname.keyword": "رشید"
          }
        }
      ],
      "must_not": [],
      "should": []
    }
  },
  "from": 0,
  "size": 10,
  "sort": [
    {
      "registry_date": {
        "order": "desc"
      }
    }
  ],
  "aggs": {}
}

但正如我所说,我现在无法在ES文档中找到它,所以我不知道它是否适用于所有版本。

更新

在6.2.2版本上测试:

http://localhost:9200/_doc/_search?source={"query":{"match_all":{}}}&source_content_type=application/json

按预期工作。自ES 6以来source_content_type需要source