2016-07-08 5 views
0

非常に複雑なクエリを弾性検索に書き込む必要があります。弾性検索における不正なクエリ

クエリは、文字列、queryに格納され、アイデアがフィールドtitlecontentの「ブール」一致を行うが、そのような「ジャワ」または「パイソン」との言葉に特別な重みを与えることです。これを行うに

私の試みは

{ 
    "fields": ["title","content","id"], 
    "query": { 
     "function_score": { 
     "query": 
     { 
       "bool": 
       { 
        "should": 
        [ 
         {"match": {"title": {"query": query, "boost": 15}}}, 
         {"match": {"content": {"query": query, "boost": 9}}} 
        ] 
       } 
      } 
     }, 
     "functions": [ 
      { 
      "filter": { 
       "match": { 
       "title": "java" 
      }}, 
      "weight": 2 }, 
      { 
      "filter": { 
       "match": { 
       "title": "python" 
      }}, 
      "weight": 2 } 
     ], 
     "boost_mode": "multiply" 
     } 
} 

あるしかし、私は、クエリが不正であるというエラーメッセージが表示されます。これが素朴な質問であれば申し訳ありませんが、どこに向けるのか分かりません。

答えて

0

はこれを試してみてください:

{ 
    "fields": [ 
    "title", 
    "content", 
    "id" 
    ], 
    "query": { 
    "function_score": { 
     "query": { 
     "bool": { 
      "should": [ 
      { 
       "match": { 
       "title": { 
        "query": query, 
        "boost": 15 
       } 
       } 
      }, 
      { 
       "match": { 
       "content": { 
        "query": query, 
        "boost": 9 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "functions": [ 
     { 
      "filter": { 
      "match": { 
       "title": "java" 
      } 
      }, 
      "weight": 2 
     }, 
     { 
      "filter": { 
      "match": { 
       "title": "python" 
      } 
      }, 
      "weight": 2 
     } 
     ], 
     "boost_mode": "multiply" 
    } 
    } 
} 
+0

はあなたに感謝します!このクエリは実際に動作します。 – Brian

+0

フィルタを使用しない場合(つまり「フィルタ」:[])、同じ結果が得られますが、通常のクエリでは「bool」の下にある部分を使用すると異なるスコアになります。なぜなのかご存知ですか? – Brian

+0

もちろん、それはそれらのフィルタの全体的なポイントです。クエリにマッチしたドキュメントから、その特定の関数(あなたの場合は 'weight'関数)に従って、フィルタに一致するものが異なるスコアリングを持つことになります。 '' boost_mode '': '' multiply ''と' weight:2'は、 'title'が' java'または 'python'にマッチする文書がクエリによって生成された通常スコアに' weight'値を乗じたものであることを意味します。 –