2016-09-02 2 views
0

私はelasticsearchインデックスに複数の値を持つフィールドfavSports(分析されていない)を持っている:私はサッカーやテニスの両方が好きな人物を見つけるクエリを書きたいElasticsearchは、「より短くて良い」スコアリングを使用して多値フィールドをクエリする方法を教えてください。

{"name":"Mike","favSports":["soccer","tennis"],...} 
{"name":"Joe","favSports":["soccer","tennis","basketball"],...} 

、これは私のクエリです:

"query": { 
    "bool": { 
    "must": [ 
     { "term": {    "favSports": "soccer"   }  }, 
     { "term": {    "favSports": "tennis"   }  } 
    ], 
    "must": { 
     "query_string": { 
     .....(Other query criteria) 
     } 
    } 
    } 
} 

上記の質問では、"favSports":"soccer/tennis"のスコアは、MikeとJoeで同じです。

Mikeが完全一致のsoccer/tennisとなり、Joeがさらにbasketballを持っているため、MikeのスコアがJoeより高いという質問を書きたいと思いますが、どうやってそのようなクエリを書くことができますか?

もう1つの質問:「サッカー」と「テニス」のみ(サッカーやテニス以外のスポーツの場合、彼はクエリ結果に含まれません)

答えて

0

関数クエリを記述すると、これが実行されます。

"script_score": { 
     "script": { 
     "file": "countReciprocal",// 1/doc[field].values.size() 
     "params": { 
      "field": "favSports" 
     } 
     } 
    } 
関連する問題