【问题标题】:Elastic Search query string requestElastic Search 查询字符串请求
【发布时间】:2018-08-17 20:33:13
【问题描述】:

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

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

效果很好。但我想在名字字段上应用 prefix filter 以通过查询字符串实现以下目标:

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

有什么帮助吗?

【问题讨论】:

  • 前缀过滤器是指例如所有以“Fre”开头的名称。会匹配“Fred”和“Freddy”吗?
  • @RishiDiwan 是的。我在我的问题中指的是结构化查询中的前缀词。
  • 你的 ES 版本是多少?如果充分更新elastic.co/guide/en/elasticsearch/reference/current/…
  • @RishiDiwan 我无法将其附加到查询字符串中。

标签: android elasticsearch


【解决方案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_typesource 所必需的。

【讨论】:

  • @Naila 请看看我的更新。它适用于我最新的 ES (6.2.2) 版本。
猜你喜欢
  • 2015-12-30
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2014-12-03
  • 2023-01-13
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多