#match查询
#match query知道分词器的存在,会对filed进行分词操作, 然后再查询
GET /ib3/user/_search
{
"query":{
"match":{ "name": "zhaoliu" }
}
}
GET /lib3/user/_search
{
"query":{
"match":{ "age": 20}
}
}
#match_all:查询所有文档
GET /ib3/user/_search
{
"query":{"match_all":{}}
}
#multi_match:可以指定多个字段
GET /ib3/user/_search
{
"query":{
"multi_match": {
"query": "Ilyou",
"fields": ["interests" ,"name"]
}
}
}
#match_ phrase:短语匹配查询
#ElasticSearch引擎首先分析(analyze) 查询字符串,
#从分析后的文本中构建短语查询,
#这意味着必须匹配短语中的所有分词,
#并且保证各个分词的相对位置不变:
GET lib3/user/_search
{
"query":{
"match_phrase":{"interests": "duanlian, shuoxiangsheng" }
}
}
term查询试试,没有找到,因为term是不知道分词的,会对 "name": "zhaoliu zhaoming" 当成一个关键字,索引这个关键字在倒排索引是没有的,所以没有找到
terms查询同样不知道分词(在倒排索引中 "name": "zhaoliu zhaoming" 会被看成一个关键字,在倒排索引是不存在这个索引的)而且terms是数组查询,不支持单个字符串查询的
#match query知道分词器的存在,会对filed进行分词操作, 然后再查询 #match指定单个字段条件查询
GET /lib3/user/_search
{
"query":{
"match":{"name": "zhaoliu zhaoming"}
}
}
{
"took" : 38,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 2,
"max_score" : 0.6931472,
"hits" : [
{
"_index" : "lib3",
"_type" : "user",
"_id" : "2",
"_score" : 0.6931472,
"_source" : {
"name" : "zhaoming",
"address" : "bei jing hai dian qu qing he zhen",
"age" : 20,
"birthday" : "1998-10-12",
"interests" : "xi huan hejiu, duanlian, changge"
}
},
{
"_index" : "lib3",
"_type" : "user",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"name" : "zhaoliu",
"address" : "hei long jiang sheng tie ling shi",
"age" : 50,
"birthday" : "1970-12-12",
"interests" : "xi buan hejiu, duanlian, lvyou"
}
}
]
}
}
我们在看下匹配度的问题
GET /lib3/user/_search
{
"query":{
"match":{"interests": "duanlian changge"}
}
}
{
"took" : 8,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : 4,
"max_score" : 1.3862944,
"hits" : [
{
"_index" : "lib3",
"_type" : "user",
"_id" : "2",
"_score" : 1.3862944,
"_source" : {
"name" : "zhaoming",
"address" : "bei jing hai dian qu qing he zhen",
"age" : 20,
"birthday" : "1998-10-12",
"interests" : "xi huan hejiu, duanlian, changge"
}
},
{
"_index" : "lib3",
"_type" : "user",
"_id" : "3",
"_score" : 0.5753642,
"_source" : {
"name" : "lisi",
"address" : "bei jing hai dian qu qing he zhen",
"age" : 23,
"birthday" : "1998-10-12",
"interests" : "xi huan hejiu,duanlian, changge"
}
},
{
"_index" : "lib3",
"_type" : "user",
"_id" : "5",
"_score" : 0.2876821,
"_source" : {
"name" : "zhangsan",
"address" : "bei jing chao yang qu",
"age" : 29,
"birthday" : "1988-10-12",
"interests" : "xi huan tingyinyue , changge , tiaowu"
}
},
{
"_index" : "lib3",
"_type" : "user",
"_id" : "1",
"_score" : 0.2876821,
"_source" : {
"name" : "zhaoliu",
"address" : "hei long jiang sheng tie ling shi",
"age" : 50,
"birthday" : "1970-12-12",
"interests" : "xi buan hejiu, duanlian, lvyou"
}
}
]
}
}
#查询user索引下年龄20的文档
GET /lib3/user/_search
{
"query":{
"match":{"age": 20}
}
}
#查询索引user下的所有文档
GET /lib3/user/_search
{
"query":{
"match_all":{}
}
}
#multi_match:可以指定多个字段条件查询
#multi_match指定多个字段条件查询
#只要指定字段条件中含有changge的这个关键字都会被查询出来
#那么含有changge也会被检索到
GET /lib3/user/_search
{
"query" :{
"multi_match": {
"query": "changge",
"fields": ["interests" , "name"]
}
}
}
#短语匹配 match_phrase
#短语匹配,在interests这个字段中含有完全一样的短语就会被查询出来
GET lib3/user/_search
{
"query":{
"match_phrase":{"interests": "duanlian, changge"}
}
}