查询elasticsearch可以通过id获取文档,但不能在全部查询中找到它

时间:2019-11-01 01:36:42

标签: elasticsearch

我正在使用ES 2.3,现在将其升级到ES 7.4。数据是通过自动测试生成的,因此始终为32个文档。

我在使用ES 2.3进行全部查询时发现,我得到了所有32个文档。 可以在结果中找到文档,例如data.id: 5dba917f61b48a327c948557。 我可以通过data.id进行查询,也可以找到文档。

但是,如果我使用ES 7做同样的事情,我CAN NOT会用data.id:5dba917f61b48a327c948557查找文档 在查询所有例如。 http://localhost:9200/test-auditing-2019-10/_search?pretty=true个结果。

{
  "took" : 16,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 32,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "test-auditing-2019-10",
        "_type" : "_doc",
        "_id" : "J0LIIG4Bw-26hPm9OiXO",
...

查询http://localhost:9200/test-auditing-2019-10/_search?q=data.id:5dba917f61b48a327c948557&pretty=true时我确实得到了文档。

...
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.3795462,
    "hits" : [
      {
        "_index" : "test-auditing-2019-10",
        "_type" : "_doc",
        "_id" : "RELIIG4Bw-26hPm9WyUP",
...

怎么了?这是预期的吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

ElasticSearch 2.3太旧,也许它将返回所有匹配的文档。我没有此版本,因此无法复制。

但是,即使您的查询匹配所有文档,现代的ElasticSearch默认也只返回10个匹配的文档。为了获得更多匹配的文档,您可以使用 public class MapEntry<K,V> { MapEntry<K,V> next; K key; V value; public MapEntry(K key, V value) { this.setKey(key); this.setValue(value); } public void setKey( K key){ this.key=key; } public void setValue(V value){ this.value=value; } public K getKey(){ return key; } public V getValue(){ return value; } public void setNext(MapEntry<K,V> next) { this.next = next; } public MapEntry<K, V> getNext() { return next; } } public class HashMap{ private int DEFAULT_CAPACITY = 10; private MapEntry<String,Double>[] Hash; private int size; public HashMap() { Hash = new MapEntry[DEFAULT_CAPACITY]; } public boolean isEmpty(){ if(size!= 0){ return false; } else{ return true; } } public int getHashCode(String key){ int bucketIndex = key.hashCode()%Hash.length; return bucketIndex; } public Double get(String key){ if(key == null){ try { throw new IllegalAccessException("Null key"); } catch (IllegalAccessException e) { e.printStackTrace(); } } MapEntry<String,Double> entry = Hash[getHashCode(key)]; while (entry != null && !key.equals(entry.getKey())) entry = entry.getNext(); if(entry != null) return entry.getValue(); else return null; } } public void put(String key, double value){ int keyBucket =hash(key); MapEntry<String,Double> temp = Hash[keyBucket]; while (temp !=null){ if((temp.key == null && key == null) || (temp.key != null && temp.key.equals(key))){ temp.value = value; return; } temp = temp.next; } Hash[keyBucket] = new MapEntry<String, Double>(key,value); size++; } public void delete (String key) throws IllegalAccessException { if(key == null){ throw new IllegalAccessException("Null key"); } } private int hash(String key){ if(key == null){ return 0; }else { return Math.abs(key.hashCode()% this.Hash.length); } } public static void main(String[] args) { HashMap hashMap = new HashMap(); hashMap.put("value", 2.2); hashMap.put("bob", 2.3); System.out.println(hashMap.get("value")); System.out.println(hashMap.get("bob")); System.out.println(hashMap.size); System.out.println(hashMap.getHashCode("value")); System.out.println(hashMap.getHashCode("bob")); System.out.println(hashMap.isEmpty()); } } from进行分页:

获取前32个文档:

size

获取下32个文档:

http://localhost:9200/test-auditing-2019-10/_search?from=0&size=32&pretty=true