技术笔记外传二——用elasticsearch搭建自己的搜索框架(二)

三 ElasticSearch的搜索功能以及esengine搜索的实现

在上期博客中,我们用elasticsearch为我们的博客建立了索引,为我们的框架提供了数据基础。这期博客中,我们将介绍elasticsearch中的核心功能——搜索,并实现框架中的单字段搜索以及多字段搜索功能。

在实现了框架中的搜索功能后,我们可以得到以下结果:

页面右上角出现了一个带有复选框的搜索表单,我们可以对多个字段进行搜索,图中是同时对标题和正文两个字段进行搜索。我们的搜索结果已分好页,且已被高亮显示。

elasticsearch提供两种搜索方式:URI搜索以及Request Body搜索。在URI搜索中,我们的搜索参数通过URI字符串传递给es。在这种搜索方式中,所有的参数都会暴露在外(类似于get方式),比较适合用cURL进行搜索测试;而Request Body方式适用于传递复杂的参数,使用ES提供的Query DSL语言进行各种复杂的搜索。在Request Body方式中,DSL语言以json的格式组织,并传递给ES,从而得到搜索结果。

我们先以ES文档中的一个Query DSL的范例来看一下这种json形式的搜索语言:

"query": {
    "match" : {
        "message" : "this is a test"
    }
}

每个Query DSL都以query关键字作为开始,表示它是一个query表达式。第二层表明了搜索方式,在这里为match,而第三层的message为欲搜索的字段,"this is a test"则为搜索的内容。注意,以上所有的关键字以及搜索内容都要用双引号包起来。这句DSL可以理解为如下含义:查找message字段中含有this is a test内容的数据。

match只是搜索方式的一种。在我们的框架中,我们使用到了以下搜索方式:

match:在指定字段中搜索指定内容;

match_phrase_prefix:以指定的内容作为前缀对指定字段进行搜索。在我们的框架中,作为当match或multi_match方式搜索不到时的一种补充搜索方式;

multi_match:在多个字段中搜索同一个指定内容;

而ES会返回给我们以下内容,我们需要在其中解析出我们想要的数据:

{
    "took": 1,
    "timed_out": false,
    "_shards":{
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
    },
    "hits":{
        "total" : 1,
        "max_score": 1.3862944,
        "hits" : [
            {
                "_index" : "twitte
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值