搜索的简单使用

  这这里主要是存在term与match的查询介绍。

一:term

  词条查询不会分析查询条件,只有当词条和查询字符串完全匹配时,才匹配搜索。

1.准备工作

  新建索引,然后新建mappings

PUT /nba/
{
  "mappings": {
    "properties": {
      "name": {
				"type": "text"
			},
			"team_name": {
				"type": "text"
			},
			"position": {
				"type": "text"
			},
			"play_year": {
				"type": "long"
			},
			"jerse_no": {
				"type": "keyword"
			}
    }
  }
}

  添加三条数据:

PUT /nba/_doc/1
{
  "name": "哈登",
	"team_name": "⽕箭",
	"position": "得分后卫",
	"play_year": 10,
	"jerse_no": "13"
}

PUT /nba/_doc/2
{
	"name": "库⾥",
	"team_name": "勇⼠",
	"position": "控球后卫",
	"play_year": 10,
	"jerse_no": "30"
}

PUT /nba/_doc/3
{
	"name": "詹姆斯",
	"team_name": "湖⼈",
	"position": "⼩前锋",
	"play_year": 15,
	"jerse_no": "23"
}

  

2.单条查询

GET /nba/_search
{
  "query": {
    "term":{
      "jerse_no": "13"
    }
  }
}

  效果:

{
  "took" : 961,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.9808292,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.9808292,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      }
    ]
  }
}

  

3.多条查询

GET /nba/_search
{
  "query": {
    "terms": {
      "jerse_no":[
        "23","13"  
      ]
    }
  }
}

  效果:

{
  "took" : 24,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      },
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "3",
        "_score" : 1.0,
        "_source" : {
          "name" : "詹姆斯",
          "team_name" : "湖⼈",
          "position" : "⼩前锋",
          "play_year" : 15,
          "jerse_no" : "23"
        }
      }
    ]
  }
}

  

二:match【会存在分词】

  ElasticSearch引擎会先分析查询字符串,将其拆分成多个分词,只要已分析的字 段中包含词条的任意⼀个,或全部包含,就匹配查询条件,返回该⽂档;如果不包含任意⼀ 个分词,表示没有任何⽂档匹配查询条件

1.match_al

  全部查询:

GET /nba/_search
{
  "query": {
    "match_all": {}
  },
  "from": 0,
  "size": 2
}

  結果:

{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 3,
      "relation" : "eq"
    },
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 1.0,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      },
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 1.0,
        "_source" : {
          "name" : "库⾥",
          "team_name" : "勇⼠",
          "position" : "控球后卫",
          "play_year" : 10,
          "jerse_no" : "30"
        }
      }
    ]
  }
}

  

2.match

GET /nba/_search
{
  "query": {
    "match": {
      "position": "得分后卫"
    }
  }
}

  效果:

{
  "took" : 60,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.797622,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 2.797622,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      },
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.90630186,
        "_source" : {
          "name" : "库⾥",
          "team_name" : "勇⼠",
          "position" : "控球后卫",
          "play_year" : 10,
          "jerse_no" : "30"
        }
      }
    ]
  }
}

  

2.multi_match

  修改mapping,添加一个字段:

POST /nba/_mapping
{
      "properties" : {
        "jerse_no" : {
          "type" : "keyword"
        },
        "name" : {
          "type" : "text"
        },
        "play_year" : {
          "type" : "long"
        },
        "position" : {
          "type" : "text"
        },
        "team_name" : {
          "type" : "text"
        },
        "title":{
          "type":"text"
        }
      
  }
}

  新增记录:

PUT /nba/_doc/4
{
	"jerse_no": "13",
	"title": "火箭"
}

  查询:

GET /nba/_search
{
  "query": {
    "multi_match": {
      "query": "火箭",
      "fields": ["team_name","title"]
    }
  }
}

  效果:

{
  "took" : 257,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.9808292,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.9808292,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      },
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.5753642,
        "_source" : {
          "jerse_no" : "13",
          "title" : "火箭"
        }
      }
    ]
  }
}

  

3.match_phase

  进行对比。

GET /nba/_search
{
  "query":{
    "match_phrase": {
      "position": "得"
    }
  }
}


GET /nba/_search
{
  "query":{
    "match_phrase": {
      "position": "后卫"
    }
  }
}

  效果:

# GET /nba/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.94566005,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.94566005,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      }
    ]
  }
}


# GET /nba/_search
{
  "took" : 0,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 0.90630186,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "1",
        "_score" : 0.90630186,
        "_source" : {
          "name" : "哈登",
          "team_name" : "⽕箭",
          "position" : "得分后卫",
          "play_year" : 10,
          "jerse_no" : "13"
        }
      },
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "2",
        "_score" : 0.90630186,
        "_source" : {
          "name" : "库⾥",
          "team_name" : "勇⼠",
          "position" : "控球后卫",
          "play_year" : 10,
          "jerse_no" : "30"
        }
      }
    ]
  }
}

  

4.match_phase_prefix

  适合单词进行匹配.

  先修改文档:

POST /nba/_update/4
{
  "doc":{
    "jerse_no" : "13",
    "title" : "best the shooter"
  }
}

GET /nba/_doc/4

  查询:

GET /nba/_search
{
  "query": {
    "match_phrase_prefix": {
      "title": "th"
    }
  }
}

  效果:

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 1,
      "relation" : "eq"
    },
    "max_score" : 0.2876821,
    "hits" : [
      {
        "_index" : "nba",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 0.2876821,
        "_source" : {
          "jerse_no" : "13",
          "title" : "best the shooter"
        }
      }
    ]
  }
}

  

猜你喜欢

转载自www.cnblogs.com/juncaoit/p/12650524.html