Elastcsearch 常用搜索命令

Elastcsearch 常用搜索命令

Elasticsearch的核心功能是搜索,有了前面的基础,可以合理地把文档索引到Elasticsearch之中。

Elassticsearch RESTful 的查询语句要封装成JSON格式的对象,称之为DSL。

添加测试数据

curl -XPUT "http://localhost:9200/movies/movie/1" -d'
{
    "title": "The Godfather",
    "director": "Francis Ford Coppola",
    "year": 1972,
    "genres": ["Crime", "Drama"]
}'

curl -XPUT "http://localhost:9200/movies/movie/2" -d'
{
    "title": "Lawrence of Arabia",
    "director": "David Lean",
    "year": 1962,
    "genres": ["Adventure", "Biography", "Drama"]
}'

curl -XPUT "http://localhost:9200/movies/movie/3" -d'
{
    "title": "To Kill a Mockingbird",
    "director": "Robert Mulligan",
    "year": 1962,
    "genres": ["Crime", "Drama", "Mystery"]
}'

curl -XPUT "http://localhost:9200/movies/movie/4" -d'
{
    "title": "Apocalypse Now",
    "director": "Francis Ford Coppola",
    "year": 1979,
    "genres": ["Drama", "War"]
}'

curl -XPUT "http://localhost:9200/movies/movie/5" -d'
{
    "title": "Kill Bill: Vol. 1",
    "director": "Quentin Tarantino",
    "year": 2003,
    "genres": ["Action", "Crime", "Thriller"]
}'

curl -XPUT "http://localhost:9200/movies/movie/6" -d'
{
    "title": "The Assassination of Jesse James by the Coward Robert Ford",
    "director": "Andrew Dominik",
    "year": 2007,
    "genres": ["Biography", "Crime", "Drama"]
}'

搜索机制

搜索机制

搜索机制解决的是相关度问题,当用户输入一个查询,Elasticsearch通过排序模型计算文档和查询关键词之间的相关度,按照评分排序后返回最相关的文档给用户

查询所有文档

http://localhost:9200/movies/_search

{
  "query":{
  	"match_all":{}
  }
}

分页查询

在查询所有的基础上增加分页查询(这里注意,es保存数据时,全部保存成小写了,要忽略大小写才能查询包含大写的数据,或者全部用小写代替)

{
  "from":0,
  "size":1,
  "query":{
  	"match_all":{}
  }
}

只查询需要的字段

{
  "from":0,
  "size":1,
  "_source":["title","director"],//这里指定我们需要查出的字段
  "query":{
  	"match_all":{}
  }
}

term查询指定字段中包含给定单词的文档

term查询用来查找指定字段中包含给定单词的文档,term查询不被解析,只有查询词和文档中的词精确匹配才会被搜索到。

{
  "from":0,
  "size":1,
  "version":true,
  "_source":["title","director"],
  "query":{
  	"term":{"title":"kill"}//查询title字段中包含kill单词的文档
  }
}

高亮查询单词

{
  "from":0,
  "size":1,
  "version":true,
  "_source":["title","director"],
  "query":{
  	"term":{"title":"kill"}
  },
  "highlight": {
        "fields" : {
            "title" : {}
        }
    }
}

全文检索

高级别的全文检索通常用于在全文字段上进行全文搜索,通过全文查询理解被查询字段是如何被索引和分析的,在执行之前将每个字段的分词词应用于查询字符串。

match 查询

match查询会被解析查询语句(term查询不会被解析),对查询语句进行分词,分词后查询语句中的任何一个词项被匹配,文档就会被搜索到。

http://localhost:9200/movies/_search

{
  "query":{
  	"match":{"title":"kill"}
  }
}

查询多个字段

multi_match是match的升级版,用于搜索多个字段

{
  "query":{
  	"multi_match":{
  		"query":"kill",
  		"fields":["title","director"]//查询title和director字段中包含kill的文档	
  	}
  }
}

词项搜索

全文搜索在执行查询之前会分析查询字符串,词项搜索时会对倒排索引中存储的词项进行精确操作。词项级别的查询通常用于结构化数据,如数字、日期和枚举类型

词项搜索

trem query用于词项搜索,之前已经解释过了

terms query

trems查询时trem查询的升级,可以用来查询文档中包含多个词的文档

{
	"query":{
		"terms":{
			"title":["mockingbird","arabia"]//查询title字段中包含mockingbird或arabia的文档
		}
	}
}

prefix query

prefix query查询用于查询某个字段中以给定前缀开始的文档

{
	"query":{
		"prefix":{
			"title":"ki"//查询title字段中含有以ki为前缀的关键词的文档
		}
	}
}

type query

type query用户查询具有指定类型的文档

{
	"query":{
		"type":{
			"value":"movie" //查询类型为movie的文档
		}
	}
}

ids query

ids query用于查询具有指定id的文档

{
	"query":{
		"ids":{
			"type":"movie",
			"values":["1","2"] //查询id为1和2的movie类型文档
		}
	}
}

复合查询

复合查询就是把一些简单查询组合在一起实现更复杂的查询需求。

bool query

bool query查询可以把任意多个简单查询组合在一起,使用must、should、must_not、filter选项来标识简单查询之间的逻辑,每个选项都可以出现0次或者多次,他们的含义如下

  • must:文档必须匹配must选项下的查询条件,相当于逻辑运算的AND
  • should:文档可以匹配should选项下的查询条件也可以不匹配,相当于逻辑运算的OR
  • must_not:与must查询相反,匹配该查询条件的文档不会被返回
  • filter 和must一样,匹配filter选项下的查询条件才会被返回,但是filter不评分,只起到过滤作用
{
	"query":{
		"bool":{
			"must":{
				"match":{"title":"kill"}
			},
			"must_not":{
				"match":{
					"title":"bill"
				}
			}
		}
	}
}
//查询title中包含kill,且不包含bill的文档

参考书籍:《从Lucene Elasticsearch》

你可能感兴趣的:(Elasticsearch)