声明:如下所有的索引数据基于上一篇已经创建好的person_news索引,具体mapping及插入的数据见上一篇
1、查询索引的所有数据,适用于数据量不大的情况
GET /your_index_name/_search
{
"query": {
"match_all": {}
}
}
2、match查询,match会对输入的关键词进行分词
GET /person_news/_search
{
"query": {
"match": {
"newsContent": "恒大"
}
}
}
3、multi_match查询是Elasticsearch中常用的一种查询类型,用于在多个字段上执行相同的查询。它可以在多个字段上执行全文搜索、短语搜索、前缀搜索等操作
他的常用语法如下:
{
"query": {
"multi_match": {
"query": "your_search_query",
"fields": ["field1", "field2", "field3"],
"type": "best_fields",
"operator": "or"
}
}
}
query: 要在字段上搜索的查询字符串。
fields: 要搜索的字段列表。
type (可选): 指定匹配类型。常见的类型包括:
best_fields: 返回匹配任意字段的文档,默认类型。
most_fields: 返回匹配最多字段的文档。
cross_fields: 将查询视为一个整体,并搜索所有字段。
phrase: 在字段中查找完整的短语匹配。
phrase_prefix: 在字段中查找短语的前缀匹配。
operator (可选): 定义多个查询词之间的逻辑操作。默认为or。如果设置为and,则所有查询词都必须匹配。
比如:
{
"query": {
"multi_match": {
"query": "quick brown fox",
"fields": ["title", "description"],
"type": "cross_fields",
"operator": "and"
}
}
}
这个示例将在title和description字段上搜索包含短语"quick brown fox"的文档,并且所有的查询词都必须匹配(由operator参数指定)
再比如:在"companyName",“newsContent”,"newsTitle"三个字段里面搜索恒大关键词,匹配则返回
GET /person_news/_search
{
"query": {
"multi_match": {
"query": "恒大",
"fields": ["companyName","newsContent","newsTitle"]
}
}
}
4、term查询,term不会对输入的关键词进行分词,es建议不要用term查询text的字段,最好查询keyword类型的字段
GET /person_news/_search
{
"query": {
"term": {
"newsSource": {
"value": "路透社"
}
}
}
}
5、terms查询,查询用于匹配字段中的多个值。它允许您指定一个或多个可能的值,并返回匹配其中任何一个值的文档
term查询用于精确匹配单个值。terms查询用于匹配多个可能的值
GET /person_news/_search
{
"query": {
"terms": {
"newsSource": [
"新华社",
"美联社"
]
}
}
}
6、bool类型查询
must等同于and
must_not 等同于 not
should 等同于 or
比如:
查询新闻来源是路透社或者是新华社同时标签里面含有许家印的新闻
GET /person_news/_search
{
"query": {
"bool": {
"must": [
{
"bool": {
"should": [
{
"match": {
"newsSource": "路透社"
}
},
{
"match": {
"newsSource" : "新华社"
}
}
]
}
},
{
"term": {
"labels": {
"value": "许家印"
}
}
}
]
}
}
}
7、范围查询
GET /person_news/_search
{
"query": {
"range": {
"hotPoint": {
"gte": 1,
"lte": 2
}
}
}
}
8、根据某个字段排序,并且分页查询
GET /person_news/_search
{
"query": {
"match_all": {}
},
"sort": [
{
"hotPoint": {
"order": "desc"
}
}
],
"from": 0,
"size": 2
}
9、Wildcard通配符查询,Wildcard查询是Elasticsearch中的一种模式匹配搜索技术,允许您在文档字段中查找与通配符模式匹配的内容。通配符可以是*(匹配零个或多个字符)或?(匹配一个字符)
GET /person_news/_search
{
"query": {
"wildcard": {
"newsSource": {
"value": "新*"
}
}
}
}
10、nested嵌套查询
如下,查询personInfo.personName=张勇 并且personInfo.age=54的数据
GET /person_news/_search
{
"query": {
"bool": {
"must": [
{
"nested": {
"path": "personInfo",
"query": {
"bool": {
"must": [
{
"term": {
"personInfo.personName": {
"value": "张勇"
}
}
},
{
"term": {
"personInfo.age": {
"value": 54
}
}
}
]
}
}
}
}
]
}
}
}