0

複数のタイプで検索しています。返される型の1つに、my_fieldというフィールドがあります。返される他の型には、そのフィールドはありません。私は、用語が存在しない場合はすべての結果を、用語が存在する場合はフィールドの値がTrueの結果のみを必要とします。弾性検索5.4 - 用語が存在する場合に用語でフィルタリングし、用語が存在しない場合にフィルタリングしない

my_fieldのフィルタがクエリスコアに寄与せず、フィルタリングされていれば素晴らしいでしょう。

これは私のものと同じくらいです。あなたが私を助けてくれたら、私は1時間自己鞭毛をします。

(これは、それが間違って使用しないでください!)

body = { 
    'query': { 
     'bool': { 
      'must': { 
       'multi_match': { 
        'query': 'pangolin', 
        'fields': ['_all', '_partials'] 
       } 
      }, 
      "should": { 
       "must_not": { 
        "exists": { 
         "field": "my_field" 
        } 
       } 
      }, 
      "should": { 
       'term': { 
        'my_field': True 
       } 
      } 
     } 
    } 
} 
+0

私はboolクエリコンテキストで必須の後に2つの必要があるので、上記は機能しません。 docs https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-bool-query.html –

答えて

0

私が必要としているようです。 文書は 'pangolin'に一致する必要があり、文書は2つの必要事項にフィルタリングされます。必要なものの1つだけが一致する必要があります。

https://www.elastic.co/guide/en/elasticsearch/reference/5.4/query-dsl-bool-query.html(キーワード:filterとshouldを参照)。

body = { 
    "query": { 
     'bool': { 
      'must': { 
       'multi_match': { 
        'query': 'pangolin', 
        'fields': ['_all', '_partials'] 
       } 
      }, 
      "filter": { 
       "bool": { 
        "should": [{ 
          "term": { 
           "my_field": True 
          } 
         }, 
         { 
          "bool": { 
           "must_not": { 
            "exists": { 
             "field": "my_field" 
            } 
           } 
          } 
         } 
        ] 
       } 
      } 
     } 
    } 
} 
0

は、あなたがこのような何かをしようとしたことがありますか?

$ curl -XPOST localhost:9200/type1,type2/_search -d '{ 
    "query": { 
    "bool": { 
     "must": [ 
     { 
      "term": { 
      "my_field": true 
      } 
     }, 
     { 
      "constant_score": { 
      "filter": { 
       "not_missing": { 
       "field": "type2.my_field" 
       } 
      } 
      } 
     } 
     ] 
    } 
    } 
}' 

これが機能するかどうかを教えてください。がんばろう!

+1

をご覧ください。ありがとうございます。午前中にチェックアウトします。 –

関連する問題