8

Elastic 5 へのクエリを作成しています (.net のネストを使用)。この結果を達成しようとしています:

値 1 と値 2 が必要です

value3 または value4 を持つ必要があります

value5 または value6 を持つ必要があります

これが私のクエリです:

    {
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "code": {
              "query": "value1"
            }
          }
        },
        {
          "match": {
            "code": {
              "query": "value2"
            }
          }
        }
      ],
      "should": [
        {
          "match": {
            "code": {
              "query": "value3"
            }
          }
        },
        {
          "match": {
            "code": {
              "query": "value4"
            }
          }
        }
        ],
        "should": [
        {
          "match": {
            "code": {
              "query": "value5"
            }
          }
        },
        {
          "match": {
            "code": {
              "query": "value6"
            }
          }
        }
      ],
      "minimum_should_match": 1
    }
  }
}

希望する答えが得られません (たとえば、値 5 と値 6 はどこにもありませんが、結果は得られます)

ありがとうございました

4

3 に答える 3

21

次に、次のようなものが必要です。

{
  "query": {
    "bool": {
      "must": [
        {
          "match": {
            "code": {
              "query": "value1"
            }
          }
        },
        {
          "match": {
            "code": {
              "query": "value2"
            }
          }
        },
        {
          "bool": {
            "minimum_should_match": 1,
            "should": [
              {
                "match": {
                  "code": {
                    "query": "value3"
                  }
                }
              },
              {
                "match": {
                  "code": {
                    "query": "value4"
                  }
                }
              }
            ]
          }
        },
        {
          "bool": {
            "minimum_should_match": 1,
            "should": [
              {
                "match": {
                  "code": {
                    "query": "value5"
                  }
                }
              },
              {
                "match": {
                  "code": {
                    "query": "value6"
                  }
                }
              }
            ]
          }
        }
      ]
    }
  }
}
于 2016-11-13T13:49:26.717 に答える
9

Valの答えに相当するNESTは次のとおりです

void Main()
{
    var client = new ElasticClient();

    client.Search<MyDocument>(s => s
        .Query(q => q
            .Bool(b => b
                .Must(mu => mu
                    .Match(m => m
                        .Field(f => f.Code)
                        .Query("value1")
                    ), mu  => mu
                    .Match(m => m
                        .Field(f => f.Code)
                        .Query("value2")
                    ), mu => mu
                    .Bool(bb => bb
                        .MinimumShouldMatch(1)
                        .Should(sh => sh
                            .Match(m => m
                                .Field(f => f.Code)
                                .Query("value3")
                            ), sh => sh
                            .Match(m => m
                                .Field(f => f.Code)
                                .Query("value4")
                            )
                        )
                    ), mu => mu
                    .Bool(bb => bb
                        .MinimumShouldMatch(1)
                        .Should(sh => sh
                            .Match(m => m
                                .Field(f => f.Code)
                                .Query("value5")
                            ), sh => sh
                            .Match(m => m
                                .Field(f => f.Code)
                                .Query("value6")
                            )
                        )
                    )
                )
            )
        )
    );
}

public class MyDocument
{
    public string Code { get; set; }
}
于 2016-11-13T21:21:38.263 に答える