如果字段类型为text,那么在插入的时候就会被分词,如果使用term查询的话,那么无法命中
GET /index_name/types_name/_search
{
"query": {
"term": {
"key": "value"
}
}
}
知道分词器的存在,会对filed进行分词操作,然后再查询
无论你在任何字段上进行的是全文搜索还是精确查询,match
查询是你可用的标准查询。
如果你在一个全文字段上使用 match
查询,在执行查询前,它将用正确的分析器去分析查询字符串:
匹配(Match)查询属于全文(Fulltext)查询,不同于词条查询,ElasticSearch引擎在处理全文搜索时,首先分析(analyze)查询字符串,然后根据分词构建查询,最终返回查询结果。匹配查询共有三种类型,分别是布尔(boolean)、短语(phrase)和短语前缀(phrase_prefix),默认的匹配查询是布尔类型,这意味着,ElasticSearch引擎首先分析查询字符串,根据分析器对其进行分词。
查询所有文档
GET index_name/_search
{
"query":{
"match_all": {}
}
}
如果在一个精确值的字段上使用它,例如数字、日期、布尔或者一个 not_analyzed
(version:5) ,keyword(7)字符串字段,那么它将会精确匹配给定的值
查询结果是所有年龄=18岁的
GET userinfo/_search
{
"query":{
"match":{"age": 18}
}
}
match query: 知道分词器的存在,会对key的value进行分词操作,然后再查询
get /index_name/_search
{
"query":{
"match": {
"key": "value"
}
}
}
会对value进行分词,然后在key1和key2两个字段的value中进行匹配
GET index_name/_search
{
"query":{
"multi_match": {
"query": "value",
"fields":["key1","key2"]
}
}
}
短语匹配查询,ElasticSearch引擎首先分析(analyze)查询字符串,从分析后的文本中构建短语查询,这意味着必须匹配短语中的所有分词,并且保证各个分词的相对位置不变
GET index_name/_search
{
"query":{
"match_phrase":{"key": "value"}
}
}
可以指定查询结果返回的字段,相当于MySQL中的select uid,uname from user
GET index_name/_search
{
"_source":["key1","key2"],
}
GET /index_name/_search
{
"query":{
"match_all":{
}
},
"sort":{
"key":{
"order":"desc[降序]|asc[升序]"
}
}
}
bool (布尔)过滤器。 这是个复合过滤器(compound filter) ,它可以接受多个其他过滤器作为参数,并将这些过滤器结合成各式各样的布尔(逻辑)组合。 用户合并其他查询语句,比如一个bool
语句,允许你在需要的时候组合其他语句,包括must
,must_not
,should
和filter
语句(多条件组合查询)
一个 bool 过滤器由四部分组成
{
"query":{
"bool":{
"must":[
],
"should":[
],
"must_not":[
],
"filter":[
]
}
}
}
查询userinfo中年龄是18随,且姓名不是lucy的信息
GET /userinfo/_search
{
"query": {
"bool": {
"must": [
{
"match": {
"age": "18"
}
}
],
"must_not": [
{
"match": {
"name": "lucy"
}
}
]
}
}
}