Elasticsearch,忽略GET响应中的内置映射详细信息

时间:2019-07-02 10:20:34

标签: php laravel elasticsearch

Elasticsearch:v7.0
应用程序:Laravel v5.8
使用Elasticsearch / Elasticsearch(https://github.com/elastic/elasticsearch-php)PHP库

我们一次可以查询超过900,000个文档,并且我们计划进行优化或加快查询速度。

我们已经观察到内置映射的详细信息总是与响应一起返回(请参见下图)

enter image description here

主要问题
-有没有办法忽略这些映射详细信息,因为我们认为,如果不包含这些详细信息,响应会更轻松。

侧面问题
-或者至少,我可以谦虚地请任何人来教育我优化我的Laravel-Elasticsearch应用程序吗?

1 个答案:

答案 0 :(得分:1)

您可以使用filter_path忽略映射详细信息,可用于减少查询返回的响应。

例如如果您点击:

GET geo/_search
{
  "query": {
    "match_all": {}
  }
}

您将获得:

{
  "took" : 8,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 206,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "geo",
        "_type" : "_doc",
        "_id" : "ALLE",
        "_score" : 1.0,
        "_source" : {
          "dateFrom" : null,
          "aListRemoved" : [ ],
          "phone" : "0036-1-424-2242",
...

但是如果您使用filter_path

GET geo/_search?filter_path=hits.hits._source
{
  "query": {
    "match_all": {}
  }
}

您将获得没有分片数量,点击关系,max_score等的结果:

{
  "hits" : {
    "hits" : [
      {
        "_source" : {
          "dateFrom" : null,
          "aListRemoved" : [ ],
          "phone" : "0036-1-424-2242",
    ...

仅因为您需要描述您想做的事情以及您打算使用哪种查询,所以不能回答其他问题。要跳过评分(如果不需要)并提高性能,可以使用filterconstant_score查询。

here

描述了一些有关调整ES集群以提高搜索速度的建议。