web-dev-qa-db-fra.com

Elasticsearch - obtenir toutes les valeurs pour un champ donné?

Est-il possible d'interroger toutes les valeurs d'un champ spécifique? Supposons que j'ai des "articles" et que chaque article ait un auteur. Puis-je effectuer une requête pour trouver la liste de tous les auteurs?

38
eric

Je pense que ce que vous voulez, c'est une recherche à facettes. Jetez un œil à cet exemple de la documentation:

http://www.elasticsearch.org/guide/reference/api/search/facets/index.html

curl -X POST "http://localhost:9200/articles/_search?pretty=true" -d '
  {
    "query" : { "query_string" : {"query" : "*"} },
    "facets" : {
      "tags" : { "terms" : {"field" : "author"} }
    }
  }
'

Voyez si vous pouvez adapter cela pour qu'il fonctionne pour vous.

J'espère que ça aide, Matt

23
MatthewJ

Comment obtenir toutes les valeurs possibles pour le champ author?

curl -XGET  http://localhost:9200/articles/_search?pretty -d '
{
    "aggs" : {
        "whatever_you_like_here" : {
            "terms" : { "field" : "author", "size":10000 }
        }
    },
    "size" : 0
}'

Remarque

  • "size":10000 Obtenez au plus 10000 valeurs uniques. La valeur par défaut est 10.

  • "size":0 Par défaut, "hits" contient 10 documents. Nous n'en avons pas besoin.

  • Par défaut, les compartiments sont classés par le doc_count par ordre décroissant.


Référence: agrégation des termes du compartiment

Notez également que, selon cette page , les facettes ont été remplacées par des agrégations dans Elasticsearch 1.0, qui sont un surensemble de facettes.

31
sam

un autre exemple

demande

curl -X POST "http://localhost:9200/_search?pretty=true" -d '
{
  "facets" : {
    "tags" : { "terms" : {"field" : "network.platform"} },
    "size" : 60
  },
  "size" : 0
}
'

réponse

{
  "took" : 266,
  "timed_out" : false,
  "_shards" : {
    "total" : 650,
    "successful" : 650,
    "failed" : 0
  },
  "hits" : {
    "total" : 41,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "facets" : {
    "tags" : {
      "_type" : "terms",
      "missing" : 15,
      "total" : 26,
      "other" : 0,
      "terms" : [ {
        "term" : "platform name 1",
        "count" : 20
      }, {
        "term" : "platform name 2",
        "count" : 6
      } ]
    }
  }
}
2
C Würtz

Le moyen le plus rapide de vérifier les valeurs de champ existantes:

GET myindex/mytype/<id>/_termvectors?fields=Product.Material.Code
  • myindex = index
  • mytype = type
  • <id> = identifiant du document
1
andrew.fox

Vous ne mentionnez pas la version Elasticsearch, mais pour ES 1.6, la méthode préférée utilise des agrégations. Voici un exemple de ce que j'utilise.

- Obtenez toutes les valeurs STATUS, qui est une requête imbriquée.

GET path for data/_search?size=200
{
  "aggs": {
    "something": {
      "nested": {
        "path": "NESTED_PATH"
      },
      "aggs": {
        "somethingCodes": {
          "terms": {
            "field": "NESTED_PATH.STATUS",
            "size": 50
          }
        }
      }
    }
  }
}

et un exemple de réponse:

"aggregations": {
      "panels": {
         "doc_count": 5029693,
         "panelCodes": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 0,
            "buckets": [
               {
                  "key": "M",
                  "doc_count": 1943107
               },
               {
                  "key": "W",
                  "doc_count": 137904
               },
               {
                  "key": "E",
                  "doc_count": 69080
               },
               {
                  "key": "Y",
                  "doc_count": 4081
               },
               {
                  "key": "N",
                  "doc_count": 1063
               },
               {
                  "key": "T",
                  "doc_count": 483
               },
               {
                  "key": "",
                  "doc_count": 1
               }
            ]
         }
      }
   }
1
James Drinkard

Veuillez utiliser le code ci-dessous pour obtenir uniquement la liste des valeurs de champ "articles" de tout le contenu de l'index.

curl ' http: // localhost: 9200/my_index/_search? pretty = true & _source = articles '

Cela vous aidera certainement.

0
I Debasmita