ElasticSearch查询停止处理大量数据

时间:2015-10-06 16:56:22

标签: search indexing elasticsearch

问题:我在settingsmappings索引方面有两个相同的内容。

第一个索引只包含1个文档 第二个索引包含相同的文档+ 16M的其他文档。

当我在第一个索引上运行查询时它会返回文档,但是当我在第二个索引上执行相同的查询时 - 我什么都没收到。

索引设置:

{
  "tasks_test": {
    "settings": {
      "index": {
        "analysis": {
          "analyzer": {
            "tag_analyzer": {
              "filter": [
                "lowercase",
                "tag_filter"
              ],
              "tokenizer": "whitespace",
              "type": "custom"
            }
          },
          "filter": {
            "tag_filter": {
              "type": "word_delimiter",
              "type_table": "# => ALPHA"
            }
          }
        },
        "creation_date": "1444127141035",
        "number_of_replicas": "2",
        "number_of_shards": "5",
        "uuid": "wTe6WVtLRTq0XwmaLb7BLg",
        "version": {
          "created": "1050199"
        }
      }
    }
  }
}

映射:

{
  "tasks_test": {
    "mappings": {
      "Task": {
        "dynamic": "false",
        "properties": {
          "format": "dateOptionalTime",
          "include_in_all": false,
          "type": "date"
        },
        "is_private": {
          "type": "boolean"
        },
        "last_timestamp": {
          "type": "integer"
        },
        "name": {
          "analyzer": "tag_analyzer",
          "type": "string"
        },
        "project_id": {
          "include_in_all": false,
          "type": "integer"
        },
        "user_id": {
          "include_in_all": false,
          "type": "integer"
        }
      }
    }
  }
}

文件:

{
  "_index": "tasks_test",
  "_type": "Task",
  "_id": "1",
  "_source": {
    "is_private": false,
    "name": "135548- test with number",
    "project_id": 2,
    "user_id": 1
  }
}

查询:

{
  "query": {
    "filtered": {
      "query": {
        "bool": {
          "must": [
            [
              {
                "match": {
                  "_all": {
                    "query": "135548",
                    "type": "phrase_prefix"
                  }
                }
              }
            ]
          ]
        }
      },
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "is_private": false
              }
            },
            {
              "terms": {
                "project_id": [
                  2
                ]
              }
            },
            {
              "terms": {
                "user_id": [
                  1
                ]
              }
            }
          ]
        }
      }
    }
  }
}

另外,一些调查结果:

  • 如果我将_all替换为name一切正常
  • 如果我将match_phrase_prefix替换为match_phrase也适用

ES版本:1.5.1

所以,问题是:如何在不提及黑客的情况下使查询适用于第二个索引?

0 个答案:

没有答案