2017-11-13 11 views
0

私はElongsearchにインデックスされたMongoDBデータベースに記事の配列を持っています。 MongoDBの各記事には、['Michael Jordan'、 '...']のような著者名の配列が含まれています。各記事はEsに索引付けされます。Elasticsearchの文字列内の文字列と一致するようにpost_filterクエリをフォーマットするにはどうすればよいですか?

私は著者による集計を行っていますが、投稿者による結果をフィルタリングするためにpost_filterを適用したいと思います。これを処理するためにpost_filterクエリをどのように設計する必要がありますか?

エススキーマ(変更可能):

{ 
    authors: ['Michael Jordan', 'Kobe Bryant'], 
    authorsString: 'Michael Jordan;Kobe Bryant;' 
} 

これはpost_filterを適用する前に、クエリの例です:

{ 
    ... 
    aggs: { 
    authors: { 
     terms: { 
     field: 'authorsArray.keyword', 
     }, 
    }, 
    }, 
    post_filter: {}, 
} 

作者の私はの記事を検索したい場合は、少なくとも1 "Michael Jordan"ですが、post_filterを使ってどうすればいいですか?著者フィールドは、いつでも、単に以下のように

"post_filter": { 
    "term": { "authors": "Michael Jordan" } 
} 
+0

著者のマッピングとは何ですか? - あなたはそれを見せることができますか? –

答えて

0

多くの著者名を含む単一の文字列の内側に著者名を一致させるために働いていたものです。 (Es 5.6):

"post_filter": { 
    "bool": { 
     "should": [{ 
      "match_phrase": { 
       authorsString: author 
      } 
     }] 
    } 
} 
+0

私はこの答えで、著者の文字列に「Michael Jackson; Alex Jordan」がある場合、このクエリよりも不適切なものになることがあると思います。私は代わりに以下に述べるようにmatch_praseクエリを実行し、それが動作します。 –

+0

それは単一の文字列だと確信していますが、著者のリストに基づいていれば、それは単一の文字列ではないようです。それ以外の場合は、authorsStringフィールドのみが提供されている場合はyesです – Shadi

0

のような用語によってフィルタリングすることができ、分析されていない場合

関連する問題