es查询语法常用汇总某索引的总记录数
一、查询某索引的总记录数
二、查询某个字段值为空
1 { 2 "query": { 3 "bool": { 4 "must_not": { 5 "exists": { 6 "field": "Year" 7 } 8 } 9 } 10 } 11 }
三、我想查询Year 等于 2019 或者 Title 字段包含 2018 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "match": { 15 "Title": "2018" 16 } 17 } 18 ] 19 } 20 } 21 } 22 ``` 23 24 上面的查询语句中,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Year` 字段等于 `2019`,要么有 `Title` 字段中包含 `2018` 字符串。如果同时满足,则会被查询到。 25 26 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 27 28 ``` 29 var searchResponse = client.Search<MyDocument>(s => s 30 .Query(q => q 31 .Bool(b => b 32 .Should( 33 bs => bs.Match(m => m.Field(f => f.Year).Query("2019")), 34 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")) 35 ) 36 ) 37 ) 38 ); 39 ``` 40 41 在 Nest 中,可以在 `Match` 查询中直接传入一个字符串来进行匹配,如上面的代码所示。当然,你也可以创建一个查询对象来代替传入字符串: 42 43 ``` 44 var yearQuery = new MatchQuery 45 { 46 Field = "Year", 47 Query = "2019" 48 }; 49 50 var titleQuery = new MatchQuery 51 { 52 Field = "Title", 53 Query = "2018" 54 }; 55 56 var searchResponse = client.Search<MyDocument>(s => s 57 .Query(q => q 58 .Bool(b => b 59 .Should( 60 bs => bs.Query(q1 => yearQuery), 61 bs => bs.Query(q2 => titleQuery) 62 ) 63 ) 64 ) 65 ); 66 ``` 67 68 这样可以使你的代码更加可读和灵活。
四:我想查询Year 等于 2019 或者 Title 字段包含 2018 或者Name包含zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "match": { 15 "Title": "2018" 16 } 17 }, 18 { 19 "match": { 20 "Name": "zhang" 21 } 22 } 23 ] 24 } 25 } 26 } 27 ``` 28 29 上面的查询语句中,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Year` 字段等于 `2019`,要么有 `Title` 字段中包含 `2018` 字符串,要么有 `Name` 字段中包含 `zhang` 字符串。如果同时满足,则会被查询到。 30 31 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 32 33 ``` 34 var searchResponse = client.Search<MyDocument>(s => s 35 .Query(q => q 36 .Bool(b => b 37 .Should( 38 bs => bs.Match(m => m.Field(f => f.Year).Query("2019")), 39 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")), 40 bs => bs.Match(m => m.Field(f => f.Name).Query("zhang")) 41 ) 42 ) 43 ) 44 ); 45 ``` 46 47 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,通过 Match 查询来进行字段与搜索关键字的匹配。也可以使用 MatchPhrase 查询来进行短语的匹配,以更精确地匹配需要的文档。
五、我想查询Year 等于 2019 并且Book包含kk 或者 Title 字段包含 2018 或者Name包含zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "must": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "match": { 15 "Book": "kk" 16 } 17 } 18 ], 19 "should": [ 20 { 21 "match": { 22 "Title": "2018" 23 } 24 }, 25 { 26 "match": { 27 "Name": "zhang" 28 } 29 } 30 ] 31 } 32 } 33 } 34 ``` 35 36 上面的查询语句中,使用了 `must` 来进行与逻辑的查询操作,即返回的文档要有 `Year` 字段等于 `2019`,且 `Book` 字段中包含 `kk` 关键字。同时使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Title` 字段中包含 `2018` 字符串,要么有 `Name` 字段中包含 `zhang` 字符串。如果同时满足,则会被查询到。 37 38 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 39 40 ``` 41 var searchResponse = client.Search<MyDocument>(s => s 42 .Query(q => q 43 .Bool(b => b 44 .Must( 45 bm => bm.Match(m => m.Field(f => f.Year).Query("2019")), 46 bm => bm.Match(m => m.Field(f => f.Book).Query("kk")) 47 ) 48 .Should( 49 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")), 50 bs => bs.Match(m => m.Field(f => f.Name).Query("zhang")) 51 ) 52 ) 53 ) 54 ); 55 ``` 56 57 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,不同的是查询条件使用的是 Must 和 Should,即返回的文档要同时满足 Must 查询和 Should 查询。 58 59 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
六、我想查询Year 等于 2019 并且Book不包含kk 或者 Title 字段包含 2018 或者Name包含zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "must": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 } 13 ], 14 "must_not": [ 15 { 16 "match": { 17 "Book": "kk" 18 } 19 } 20 ], 21 "should": [ 22 { 23 "match": { 24 "Title": "2018" 25 } 26 }, 27 { 28 "match": { 29 "Name": "zhang" 30 } 31 } 32 ] 33 } 34 } 35 } 36 ``` 37 38 上面的查询语句中,使用了 `must` 来进行与逻辑的查询操作,即返回的文档必须有 `Year` 字段等于 `2019`。同时,使用了 `must_not` 来进行非逻辑的查询操作,即返回的文档不能有 `Book` 字段中包含 `kk` 关键字。最后,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Title` 字段中包含 `2018` 字符串,要么有 `Name` 字段中包含 `zhang` 字符串。如果同时满足,则会被查询到。 39 40 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 41 42 ``` 43 var searchResponse = client.Search<MyDocument>(s => s 44 .Query(q => q 45 .Bool(b => b 46 .Must( 47 bm => bm.Match(m => m.Field(f => f.Year).Query("2019")) 48 ) 49 .MustNot( 50 bmn => bmn.Match(m => m.Field(f => f.Book).Query("kk")) 51 ) 52 .Should( 53 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")), 54 bs => bs.Match(m => m.Field(f => f.Name).Query("zhang")) 55 ) 56 ) 57 ) 58 ); 59 ``` 60 61 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,不同的是查询条件使用的是 Must,MustNot和Should,即返回的文档必须同时满足 Must 查询和 Should 查询,并且不能满足 MustNot 查询。 62 63 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
七、我想查询Year 等于 2019 并且 Title 字段包含 2018 并且Name不等于zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "must": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "match": { 15 "Title": "2018" 16 } 17 } 18 ], 19 "must_not": [ 20 { 21 "match": { 22 "Name": "zhang" 23 } 24 } 25 ] 26 } 27 } 28 } 29 ``` 30 31 上面的查询语句中,使用了 `must` 来进行与逻辑的查询操作,即返回的文档必须有 `Year` 字段等于 `2019`,且 `Title` 字段中包含 `2018` 字符串。同时,使用了 `must_not` 来进行非逻辑的查询操作,即返回的文档不能有 `Name` 字段等于 `zhang`。如果同时满足,则会被查询到。 32 33 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 34 35 ``` 36 var searchResponse = client.Search<MyDocument>(s => s 37 .Query(q => q 38 .Bool(b => b 39 .Must( 40 bm => bm.Match(m => m.Field(f => f.Year).Query("2019")), 41 bm => bm.Match(m => m.Field(f => f.Title).Query("2018")) 42 ) 43 .MustNot( 44 bmn => bmn.Match(m => m.Field(f => f.Name).Query("zhang")) 45 ) 46 ) 47 ) 48 ); 49 ``` 50 51 在 Nest 中,也是使用 Bool 和 MustNot 和 Must 来嵌套查询,即返回的文档必须同时满足 Must 查询,不能满足 MustNot 查询,并且必须有 Title 包含 2018 和 Year 等于 2019 的条件。 52 53 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
八、我想查询Year 等于 2019 并且 Title 字段包含 2018 或者Name不等于zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "must": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 } 13 ], 14 "should": [ 15 { 16 "match": { 17 "Title": "2018" 18 } 19 }, 20 { 21 "bool": { 22 "must_not": [ 23 { 24 "match": { 25 "Name": "zhang" 26 } 27 } 28 ] 29 } 30 } 31 ] 32 } 33 } 34 } 35 ``` 36 37 上面的查询语句中,使用了 `must` 来进行与逻辑的查询操作,即返回的文档必须有 `Year` 字段等于 `2019`。同时,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Title` 字段中包含 `2018` 字符串,要么有 `Name` 字段不等于 `zhang` 字符串。如果同时满足,则会被查询到。 38 39 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 40 41 ``` 42 var searchResponse = client.Search<MyDocument>(s => s 43 .Query(q => q 44 .Bool(b => b 45 .Must( 46 bm => bm.Match(m => m.Field(f => f.Year).Query("2019")) 47 ) 48 .Should( 49 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")), 50 bs => bs.Bool(bn => bn.MustNot(m => m.Match(m => m.Field(f => f.Name).Query("zhang")))) 51 ) 52 ) 53 ) 54 ); 55 ``` 56 57 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,不同的是在 Should 中使用了一个 Bool 来实现多个条件查询。如果有任意一个条件满足,则会被查询到。 58 59 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
九、我想查询Year 等于 2019 或者Name不等于zhang 或者Tile等于aaa 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "bool": { 15 "must_not": [ 16 { 17 "match": { 18 "Name": "zhang" 19 } 20 } 21 ] 22 } 23 }, 24 { 25 "match": { 26 "Title": "aaa" 27 } 28 } 29 ] 30 } 31 } 32 } 33 ``` 34 35 上面的查询语句中,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Year` 字段等于 `2019`,要么有 `Name` 字段不等于 `zhang`,要么有 `Title` 字段中包含 `aaa` 字符串。如果满足其中一个条件或多个条件,则会被查询到。 36 37 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 38 39 ``` 40 var searchResponse = client.Search<MyDocument>(s => s 41 .Query(q => q 42 .Bool(b => b 43 .Should( 44 bs => bs.Match(m => m.Field(f => f.Year).Query("2019")), 45 bs => bs.Bool(bn => bn.MustNot(m => m.Match(m => m.Field(f => f.Name).Query("zhang")))), 46 bs => bs.Match(m => m.Field(f => f.Title).Query("aaa")) 47 ) 48 ) 49 ) 50 ); 51 ``` 52 53 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,分别设置三个 Match 和一个 Bool MustNot 子查询。如果有任意一个条件满足,则会被查询到。 54 55 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
十、我想查询Year 等于 2019 或者Name不等于zhang 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "bool": { 15 "must_not": [ 16 { 17 "match": { 18 "Name": "zhang" 19 } 20 } 21 ] 22 } 23 } 24 ] 25 } 26 } 27 } 28 ``` 29 30 上面的查询语句中,使用了 `should` 来进行或逻辑的查询操作,即返回的文档要么有 `Year` 字段等于 `2019`,要么有 `Name` 字段不等于 `zhang`。如果满足其中一个条件或多个条件,则会被查询到。 31 32 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 33 34 ``` 35 var searchResponse = client.Search<MyDocument>(s => s 36 .Query(q => q 37 .Bool(b => b 38 .Should( 39 bs => bs.Match(m => m.Field(f => f.Year).Query("2019")), 40 bs => bs.Bool(bn => bn.MustNot(m => m.Match(m => m.Field(f => f.Name).Query("zhang")))) 41 ) 42 ) 43 ) 44 ); 45 ``` 46 47 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,分别设置两个 Match 子查询。如果有任意一个条件满足,则会被查询到。 48 49 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
十一、我想查询Year 等于 2019 并且Book不包含kk 或者 Title 字段包含 2018 或者Name包含zhang 并且Number等于5 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Title": "2018" 11 } 12 }, 13 { 14 "bool": { 15 "must": [ 16 { 17 "match": { 18 "Name": "zhang" 19 } 20 }, 21 { 22 "match": { 23 "Number": 5 24 } 25 } 26 ] 27 } 28 }, 29 { 30 "bool": { 31 "must_not": [ 32 { 33 "match": { 34 "Book": "kk" 35 } 36 } 37 ], 38 "must": [ 39 { 40 "match": { 41 "Year": 2019 42 } 43 } 44 ] 45 } 46 } 47 ] 48 } 49 } 50 } 51 ``` 52 53 上面的查询语句中,使用了 `should` 和 `must` 来进行组合查询操作,即返回的文档要么有 `Title` 字段包含 `2018`,或者有 `Name` 字段包含 `zhang` 并且有 `Number` 字段等于 `5`,或者有 `Year` 字段等于 `2019` 并且不包含 `Book` 字段包含 `kk`。如果满足其中一个条件或多个条件,则会被查询到。 54 55 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 56 57 ``` 58 var searchResponse = client.Search<MyDocument>(s => s 59 .Query(q => q 60 .Bool(b => b 61 .Should( 62 bs => bs.Match(m => m.Field(f => f.Title).Query("2018")), 63 bs => bs.Bool(bn => bn.Must( 64 mu => mu.Match(m => m.Field(f => f.Name).Query("zhang")), 65 mu => mu.Match(m => m.Field(f => f.Number).Query("5")) 66 )), 67 bs => bs.Bool(bn => bn.MustNot( 68 mu => mu.Match(m => m.Field(f => f.Book).Query("kk")) 69 )).Must( 70 mu => mu.Match(m => m.Field(f => f.Year).Query("2019")) 71 ) 72 ) 73 ) 74 ) 75 ); 76 ``` 77 78 在 Nest 中,也是使用 Bool 和 Should 来嵌套查询,使用 Match 和 Must 等子查询。如果有任意一个条件满足,则会被查询到。 79 80 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
十二:查询Year等于2019 或者 Title等于2018 的语法区别
1 在es中 写法如下: { 2 "query": { 3 "bool": { 4 "should": [{ 5 "match": { 6 "Year": 2019 7 } 8 }, 9 { 10 "match": { 11 "Title": "2018" 12 } 13 } 14 ] 15 } 16 } 17 } 这种写法 和下面 这种写法 是一样的吗? 18 19 { 20 "query": { 21 "bool": { 22 "must": [{ 23 "match": { 24 "Year": 2019 25 } 26 }], 27 "should": [{ 28 "match": { 29 "Title": "2018" 30 } 31 32 }] 33 } 34 } 35 }
1 这两种写法的含义不完全相同,主要区别在于是否强制匹配must条件所出现的文档。 2 3 第一种写法中,使用should作为组合查询条件,表示只要满足其中的任意一个条件就可以被匹配。如果同时匹配了两个条件,那么得分会更高。 4 5 第二种写法中,使用must和should作为组合查询条件,表示文档必须满足must条件,并且至少满足should中的一个条件才能被匹配。如果只满足should中的一个条件,那么得分会比同时满足两个条件低。 6 7 因此,如果你期望只要满足其中任意一个条件就可以被匹配,可以使用第一种写法;如果你期望同时满足多个条件,并且其中某一个条件比其他条件更加重要,可以使用第二种写法,并将该条件放在must中。
十三、我想查询Year 等于 2019 并且Book不包含kk 并且 Title 字段包含 2018 或者Name包含zhang 或者Number等于5 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "must": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "bool": { 15 "must_not": [ 16 { 17 "match": { 18 "Book": "kk" 19 } 20 } 21 ] 22 } 23 } 24 ], 25 "should": [ 26 { 27 "match": { 28 "Title": "2018" 29 } 30 }, 31 { 32 "match": { 33 "Name": "zhang" 34 } 35 }, 36 { 37 "match": { 38 "Number": 5 39 } 40 } 41 ] 42 } 43 } 44 } 45 ``` 46 47 上面的查询语句中,使用了 `must`、`must_not` 和 `should` 来进行组合查询操作,即返回的文档必须同时满足 `Year` 等于 `2019`,并且不包含 `Book` 包含 `kk`,同时满足 `Title` 包含 `2018`,或者满足 `Name` 包含 `zhang`,或者满足 `Number` 等于 `5` 中的至少一个条件。如果以上条件都满足,则该文档会被查询到。 48 49 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 50 51 ``` 52 var searchResponse = client.Search<MyDocument>(s => s 53 .Query(q => q 54 .Bool(b => b 55 .Must(mu => mu 56 .Match(m => m.Field(f => f.Year).Query("2019")), 57 mu => mu.Bool(bn => bn.MustNot( 58 mn => mn.Match(m => m.Field(f => f.Book).Query("kk")) 59 )) 60 ).Should(sh => sh 61 .Match(m => m.Field(f => f.Title).Query("2018")), 62 sh => sh.Match(m => m.Field(f => f.Name).Query("zhang")), 63 sh => sh.Match(m => m.Field(f => f.Number).Query("5")) 64 ) 65 ) 66 ) 67 ); 68 ``` 69 70 在 Nest 中,也是使用 `Bool` 和 `Should`、`Must`、`MustNot` 来嵌套查询,使用 `Match` 等子查询。如果文档同时满足 `Year` 等于 `2019`,并且不包含 `Book` 包含 `kk`,同时满足 `Title` 包含 `2018`,或者满足 `Name` 包含 `zhang`,或者满足 `Number` 等于 `5` 中的至少一个条件,则文档会被查询到。 71 72 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
十三:我想查询Year 等于 2019 或者Book不包含kk 并且 Title 字段包含 2018 或者Name包含zhang 并且Number等于5 的记录,怎么写呢?分别用es写法,还有es nest类库写法。
1 用 Elasticsearch 原生查询语法可以这样写: 2 3 ``` 4 { 5 "query": { 6 "bool": { 7 "should": [ 8 { 9 "match": { 10 "Year": 2019 11 } 12 }, 13 { 14 "bool": { 15 "must_not": [ 16 { 17 "match": { 18 "Book": "kk" 19 } 20 } 21 ] 22 } 23 } 24 ], 25 "must": [ 26 { 27 "bool": { 28 "should": [ 29 { 30 "match": { 31 "Title": "2018" 32 } 33 }, 34 { 35 "match": { 36 "Name": "zhang" 37 } 38 }, 39 { 40 "match": { 41 "Number": 5 42 } 43 } 44 ] 45 } 46 } 47 ] 48 } 49 } 50 } 51 ``` 52 53 上面的查询语句中,使用了 `should` 和 `must` 来进行组合查询操作,即返回的文档可以满足 `Year` 等于 `2019` 或者不包含 `Book` 包含 `kk`,同时满足 `Title` 包含 `2018`,或者满足 `Name` 包含 `zhang`,并且满足 `Number` 等于 `5` 中的至少一个条件。如果以上条件都满足,则该文档会被查询到。 54 55 使用 Elasticsearch 的 Nest 类库,这个查询可以这样写: 56 57 ``` 58 var searchResponse = client.Search<MyDocument>(s => s 59 .Query(q => q 60 .Bool(b => b 61 .Should(sh => sh 62 .Match(m => m.Field(f => f.Year).Query("2019")), 63 sh => sh.Bool(bn => bn.MustNot( 64 mn => mn.Match(m => m.Field(f => f.Book).Query("kk")) 65 )) 66 ).Must(mu => mu 67 .Bool(bn => bn 68 .Should(sh => sh 69 .Match(m => m.Field(f => f.Title).Query("2018")), 70 sh => sh.Match(m => m.Field(f => f.Name).Query("zhang")), 71 sh => sh.Match(m => m.Field(f => f.Number).Query("5")) 72 ) 73 ) 74 ) 75 ) 76 ); 77 ``` 78 79 在 Nest 中,也是使用 `Bool` 和 `Should`、`Must`、`MustNot` 来嵌套查询,使用 `Match` 等子查询。如果文档可以满足 `Year` 等于 `2019` 或不包含 `Book` 包含 `kk`,同时满足 `Title` 包含 `2018`,或者满足 `Name` 包含 `zhang`,并且满足 `Number` 等于 `5` 中的至少一个条件,则文档会被查询到。 80 81 以上代码仅供参考,具体实现可能需要根据实际情况进行修改。
我想查询 fileContent=“666” and fileName="777" and Code="888" and (Type=1 or Type=2 or Type=3) ,怎么写呢?分别用es写法,还有es nest类库写法。
1 ES 查询语法: 2 3 您可以通过以下查询 DSL 编写您的查询: 4 5 ``` 6 { 7 "query": { 8 "bool": { 9 "must": [ 10 { "match": { "fileContent": "666" }}, 11 { "match": { "fileName": "777" }}, 12 { "match": { "Code": "888" }}, 13 { "bool": { 14 "should": [ 15 { "match": { "Type": 1 }}, 16 { "match": { "Type": 2 }}, 17 { "match": { "Type": 3 }} 18 ], 19 "minimum_should_match": 1 20 } 21 } 22 ] 23 } 24 } 25 } 26 ``` 27 28 其中,`bool` 查询是一个组合查询,`must` 表示所有查询子句都必须匹配,`should` 表示只需要其中一个匹配即可。`minimum_should_match` 控制至少需要满足多少个 `should` 查询子句。 29 30 ES Nest 类库写法: 31 32 使用 ES Nest 类库,您可以将上述查询转换为以下 C# 代码: 33 34 ``` 35 using Nest; 36 37 var searchResponse = client.Search<YourDocument>(s => s 38 .Query(q => q 39 .Bool(b => b 40 .Must(mu => mu 41 .Match(m => m.Field(f => f.FileContent).Query("666")), 42 mu => mu 43 .Match(m => m.Field(f => f.FileName).Query("777")), 44 mu => mu 45 .Match(m => m.Field(f => f.Code).Query("888")), 46 mu => mu 47 .Bool(bb => bb 48 .Should(sh => sh 49 .Match(m => m.Field(f => f.Type).Query("1")), 50 sh => sh 51 .Match(m => m.Field(f => f.Type).Query("2")), 52 sh => sh 53 .Match(m => m.Field(f => f.Type).Query("3")) 54 ) 55 .MinimumShouldMatch(1) 56 ) 57 ) 58 ) 59 ) 60 ); 61 ``` 62 63 其中,`client` 是一个 `ElasticClient` 对象。`Match` 方法构建一个 `match` 查询,`Should` 方法构建一个 `should` 查询子句,`MinimumShouldMatch` 方法指定至少要满足多少个 `should` 查询子句。其他方法的含义与查询语法中的相同。
"minimum_should_match": 1 是什么意思
1 `minimum_should_match` 是在布尔查询中使用的一个参数,用于指定至少需要满足多少个 `should` 查询子句。 2 3 在 Elasticsearch 中,`bool` 查询是一个组合查询,可包含多个子查询。其中包括 `must` 查询、`should` 查询、`must_not` 查询等。其中,`should` 查询表示只要满足其中一个查询子句即可,而 `minimum_should_match` 参数则可用于指定至少需要满足多少个 `should` 查询子句。其默认值为 1,即至少需要满足一个 `should` 查询子句。 4 5 例如,"should"查询包含多个分支,每个分支包含一个查询子句。当 `minimum_should_match` 值为 2 时,至少需要满足两个分支中的查询子句。如果只有一个分支满足条件,则查询不返回任何结果。 6 7 因此,在您的查询语句中, `minimum_should_match` 参数值为 1,表示至少需要满足一个 `should` 查询子句。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?