Es学习笔记

一、全文搜索(一种传统数据库很难实现的功能)

我们将会搜索所有喜欢“rock climbing”的员工:
GET /megacorp/employee/_search
{
    "query" : {
        "match" : {
            "about" : "rock climbing"
        }
    }
}

你可以看到我们使用了之前的match查询,从about字段中搜索"rock climbing",我们得到了两个匹配文档:

{
   ...
   "hits": {
      "total":      2,
      "max_score":  0.16273327,
      "hits": [
         {
            ...
            "_score":         0.16273327, <1>
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            }
         },
         {
            ...
            "_score":         0.016878016, <2>
            "_source": {
               "first_name":  "Jane",
               "last_name":   "Smith",
               "age":         32,
               "about":       "I like to collect rock albums",
               "interests": [ "music" ]
            }
         }
      ]
   }
}

默认情况下,Elasticsearch根据结果相关性评分来对结果集进行排序, 结果相关性评分就是文档与查询条件的匹配程度。

但是为什么Jane Smith也会出现在结果里呢?原因是“rock”在她的abuot字段中被提及了。因为只有“rock”被提及而“climbing”没有,所以她的_score要低于John。

二、短语搜索

全文搜索允许我们在字段中搜索单独的一个词,这挺好的,但是有时候你想要确切的匹配若干个单词或者短语(phrases)。例如我们想要查询同时包含"rock"和"climbing"(并且是相邻的)的员工记录。

GET /megacorp/employee/_search
{
    "query" : {
        "match_phrase" : {
            "about" : "rock climbing"
        }
    }
}

毫无疑问,该查询返回John Smith的文档:

{
   ...
   "hits": {
      "total":      1,
      "max_score":  0.23013961,
      "hits": [
         {
            ...
            "_score":         0.23013961,
            "_source": {
               "first_name":  "John",
               "last_name":   "Smith",
               "age":         25,
               "about":       "I love to go rock climbing",
               "interests": [ "sports", "music" ]
            }
         }
      ]
   }
}

 

三、查询高亮显示

Elasticsearch中高亮片段是非常容易的,让我们在之前的语句上增加highlight参数:

{
  "query": {
    "match_phrase": {
      "company_name": "苗会"
    }
  },
  "highlight": {
    "fields": {
      "company_name": {}
    }
  }
}

当我们运行这个语句时,会命中与之前相同的结果,但是在返回结果中会有一个新的部分叫做highlight,并且用<em></em>来标识匹配到的单词。

{
"_index": "miaotu_formal",
"_type": "company_info_and_type",
"_id": "234",
"_score": 3.3942661,
"_source": {
"company_name": "中苗会",
"short_name": "中苗会",
"type_name": "景观设计"
},
"highlight": {
"company_name": [
"中<em>苗</em><em>会</em>"
]
}
}

 

转载于:https://my.oschina.net/u/2494581/blog/742403

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值