私はESで2つのクエリを持っています。両方とも、同じドキュメントセットで異なる納期がかかります。どちらも概念的に同じことをしています。私は疑いがほとんどありませんフィルタリングされたブール対ブールクエリ:elasticsearch
1-これらの違いは何ですか? 2-どちらを使うのが良いですか? 3両方が同じ場合、異なる理由を実行していますか?
1. Filtered bool
{
"from": 0,
"size": 5,
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1987112602"
}
},
{
"term": {
"original_sender_address_number": "6870340319"
}
},
{
"range": {
"x_event_timestamp": {
"gte": "2016-07-01T00:00:00.000Z",
"lte": "2016-07-30T00:00:00.000Z"
}
}
}
]
}
}
}
},
"sort": [
{
"x_event_timestamp": {
"order": "desc",
"ignore_unmapped": true
}
}
]
}
2. Simple Bool
{
"query": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1277478699"
}
},
{
"term": {
"original_sender_address_number": "8020564722"
}
},
{
"term": {
"cause_code": "573"
}
},
{
"range": {
"x_event_timestamp": {
"gt": "2016-07-13T13:51:03.749Z",
"lt": "2016-07-16T13:51:03.749Z"
}
}
}
]
}
},
"from": 0,
"size": 10,
"sort": [
{
"x_event_timestamp": {
"order": "desc",
"ignore_unmapped": true
}
}
]
}
マッピング:
{
"ccp": {
"mappings": {
"type1": {
"properties": {
"original_sender_address_number": {
"type": "string"
},
"called_party_address_number": {
"type": "string"
},
"cause_code": {
"type": "string"
},
"x_event_timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
.
.
.
}
}
}
}
}
アップデート1:
私は、同じデータセットのブール値/照会しなければならないとブール/フィルタクエリを試してみましたが、私は奇妙な行動を発見しました
1- bool/mustクエリが必要なものを検索できる文書
{
"query": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
2- BOOL /フィルタは、ドキュメントを検索することはできないが。私は2番目のフィールド条件を削除した場合には、401のようにフィールド2の値
{
"query": {
"bool": {
"filter": [
{
"term": {
"called_party_address_number": "8701662243"
}
},
{
"term": {
"cause_code": "401"
}
}
]
}
}
}
アップデート2と同じレコードを検索します。
ブール値で得点相を抑制するソリューションは/ 以内にそれをラップすることにより、クエリを実行しなければなりませんが見つかりました"constant_score"。 "1235235757" 及び "cause_code": "304" 我々は "called_party_address_number" を持つと一致しようとしている
{
"query": {
"constant_score": {
"filter": {
"bool": {
"must": [
{
"term": {
"called_party_address_number": "1235235757"
}
},
{
"term": {
"cause_code": "304"
}
}
]
}
}
}
}
}
録音。
興味深いことに秒1は、ヘッドplugin.Thanksによって生成されます。 – Mudit
どちらも有効ですが、クエリーコンテキスト(スコア計算でゆっくりと)で 'must 'を実行する最初のものが有効ですが、' filter'の2番目のものはスコアリングが不要な場合の最適化の一種です。 – Val
私はこれにスコアリングする必要はありません。あなたから提案されたもののために行く。クイックヘルプに感謝します。 – Mudit