5

postsElasticsearch を使用してオートコンプリート検索を構築しているため、3 つのインデックス, comments,をクエリする必要がありますauthors。次のクエリがあります。

{
   "query":{
      "query_string":{
         "query":"something"
      }
   }
}

呼び出し:

curl -X GET 'http://localhost:9200/posts,comments,authors/_search?pretty' -d '{
  "query": {
    "query_string": {
      "query": "something"
    }
  }
}'

結果を特定のインデックス フィールドで並べ替える必要があります。次に例を示します。

comments_count投稿インデックスには、 、 コメントvotes_count、 著者というフィールドがありますposts_count。投稿を比較する場合はcomments_count、コメントvotes_countの場合は 、作成者の場合は で並べ替える必要がありますposts_count

そのようなことをすることは可能ですか?インデックスは完全に異なるドキュメントをインデックス化するため、インデックスを 1 つにマージしたくありません。

4

3 に答える 3

2

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-request-sort.html

複数のインデックスに対してクエリを実行し、フィールドが他のインデックスに存在しない場合は、ignore unmapped_type を使用してフィールドを無視します。

于 2015-07-01T18:58:21.693 に答える
2

さて、私の問題は、すべてのインデックスに存在しないフィールドで並べ替えると、ドキュメントが返されないことでした。

なんとか解決しました:

{
   "_script":{
      "script":"type=doc['_type'].value;if(type=='posts'){return doc['comments_count'].value} else {return 0};",
      "type":"number",
      "order":"desc"
   }
}

少なくとも、最下部にある場合でも、ドキュメントが表示されるようになりました。

于 2013-06-01T06:10:35.790 に答える