7

Elasticsearch クエリの結果をフィルタリングして、空でないフィールドを持つものだけを取得したい

例えば。次のデータを与える

{
  total: 4912,
  max_score: 1,
  hits: [
{
  {
    _index: "gcba",
    _type: "bafici",
    _id: "5a93472b-5db4-4ff9-8c8a-d13158e72d5f-62",
    _score: 1,
    _source: {
      id_film: "23",
      title: "great film",
    }
  },
  {
    _index: "gcba",
    _type: "bafici",
    _id: "2732fbf4-4e55-4794-8e98-e5d5fa6a0419-40",
    _score: 1,
    _source: {
      name: "conference",
      [...]
    }
  }
}

次のようなものを発行したいと思います

.../_search?from=1&size=100&q=id_film:'*'

id_film 値を持つ要素のみを取得する

4

3 に答える 3

5

ワイルドカード クエリを実行すると、ES はデフォルトでその特定のフィールドを持つドキュメントのみを返します。

% curl -XPUT http://localhost:9200/foo/bar/1 -d '{"id":1,"id_film":23}'
{"ok":true,"_index":"foo","_type":"bar","_id":"1","_version":1}%

% curl -XPUT http://localhost:9200/foo/bar/2 -d '{"id":2,"foo":23}'
{"ok":true,"_index":"foo","_type":"bar","_id":"2","_version":1}%

% curl "http://localhost:9200/foo/_search?q=id_film:*&pretty=true"
{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "foo",
      "_type" : "bar",
      "_id" : "1",
      "_score" : 1.0, "_source" : {"id":1,"id_film":23}
    } ]
  }
}%
于 2012-05-07T05:13:11.757 に答える
4

存在する (または見つからない) フィルターを使用することもできます。ここを参照してください:

http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-exists-filter.html

唯一のことは、クエリではなくフィルターです。search メソッドで動作させるには、match_all のクエリが必要であり、フィルターとして存在します。(または、constant_score クエリを使用して、このフィルターをその中で指定します)

于 2012-11-14T21:17:53.763 に答える
0

新しいExists Queryのドキュメントには、優れたイラストがあります。

于 2016-09-27T09:13:53.943 に答える