第12篇-Elasticsearch全文查询

我的Elasticsearch系列文章,逐渐更新中,欢迎关注

0A.关于Elasticsearch及实例应用

00.Solr与ElasticSearch对比

01.ElasticSearch能做什么?

02.Elastic Stack功能介绍

03.如何安装与设置Elasticsearch API

04.如果通过elasticsearch的head插件建立索引_CRUD操作

05.Elasticsearch多个实例和head plugin使用介绍

06.当Elasticsearch进行文档索引时,它是怎样工作的?

07.Elasticsearch中的映射方式—简洁版教程

08.Elasticsearch中的分析和分析器应用方式

09.Elasticsearch中构建自定义分析器

10.Kibana科普-作为Elasticsearhc开发工具

11.Elasticsearch查询方法

12.Elasticsearch全文查询

另外Elasticsearch入门,我强烈推荐ElasticSearch搭建小白指南给你,非常想尽的入门指南手册。


我们已经学习了Elasticsearch查询的基本分类,这两个类别的基本知识以及查询/过滤器上下文。在此博客中,其目的是向您介绍Elasticsearch世界中常见的全文查询。

让我们索引一些主要由一些文本组成的数据。为简单起见,我采用了Facebook帖子的修剪版本及其说明和详细信息的CSV,这些内容可以在公共网站上获得。您可以将这些tweet索引到Elasticsearch

我已将上述推文索引到名为fb-post的索引。索引后的样本数据文档如下所示:

{

        "_index" : "fb-post",

        "_type" : "_doc",

        "_id" : "TszxwG0Bm6hFGbtHjVCC",

        "_score" : 1.0,

        "_source" : {

          "status_type" : "shared_story",

          "link" : "http://abcnews.go.com/blogs/headlines/2011/12/chief-justice-roberts-responds-to-judicial-ethics-critics/",

          "description" : "PAUL J. RICHARDS/AFP/Getty Images Chief Justice John Roberts issued a ringing endorsement Saturday night of his colleagues’ ability to determine when they should step down from a case because of a conflict of interest. “I have complete confidence in the capability of my colleagues to determine when ...",

          "caption" : "abcnews.go.com",

          "love_count" : 0,

          "shares_count" : 12,

          "page_id" : 86680728811,

          "wow_count" : 0,

          "post_type" : "link",

          "id" : "86680728811_272953252761568",

          "posted_at" : "2012-01-01 00:30:26",

          "sad_count" : 0,

          "angry_count" : 0,

          "message" : "Roberts took the unusual step of devoting the majority of  his annual  report to the issue of judicial ethics.",

          "picture" : "https://external.xx.fbcdn.net/safe_image.php?d=AQAPXteeHLT2K7Rb&w=130&h=130&url=http%3A%2F%2Fabcnews.go.com%2Fimages%2FPolitics%2Fgty_chief_justice_john_roberts_jt_111231_wblog.jpg&cfs=1&sx=108&sy=0&sw=269&sh=269",

          "likes_count" : 61,

          "thankful_count" : 0,

          "@timestamp" : "2012-01-01T00:30:26.000+05:30",

          "comments_count" : 27,

          "name" : "Chief Justice Roberts Responds to Judicial Ethics Critics",

          "haha_count" : 0

        }

      }b

在上面的文档中,我们感兴趣的字段是诸如“名称”,“消息”和“描述”之类的文本字段。

现在让我们一个接一个地转到每个全文查询。

1.匹配查询

我们在之前的博客中讨论了匹配查询,但是没有提到匹配查询的正常用例。匹配查询最常见的用例是当我们拥有大量数据集时,我们需要快速找到一些近似精确的匹配项。

例如,在我们的Twitter数据集中,我们需要确定整个推文集中是否存在“信心”一词。可以使用针对以下“文本”字段的简单匹配查询来完成此操作:

POST fb-post/_search

{

  "query": {

    "match": {

      "description": {

        "query":"confidence"

      }

    }

  }

}

结果将显示带有“ confidence”文本的推文。

现在在上面的示例中,我们只看到了一个单词。当我们输入多个单词时会发生什么?让我们尝试下面的查询,这里我们要给出的查询是“ 信心大厦 ”

POST fb-post/_search

{

  "query": {

    "match": {

      "description": {

        "query":"confidence buildings"

      }

    }

  }

}

现在,这将返回匹配“信心” 或 “建筑物”的文档。匹配查询的默认行为为OR。这可以更改。如果我们要同时匹配“信心” 和“建筑物”,则可以在查询中指定“ operator”参数,如下所示:

POST fb-post/_search

{

  "query": {

    "match": {

      "description": {

        "query":"confidence buildings",

        "operator":"AND"

      }

    }

  }

}上面的查询将返回包含“信心”和“建筑物”(在我们的数据集中为零)的文档

2.多重比对查询

顾名思义,多匹配查询将在多个字段中搜索搜索关键字。假设我们有一个搜索关键字“ Giffords family”,可以在“名称”和“描述”字段中进行搜索,则可以使用多重匹配查询。

POST fb-post/_search

{

  "query": {

    "multi_match" : {

      "query":    "Giffords family",

      "fields": [ "name", "description" ]

    }

  }

}

在此处,针对“名称”和“描述”字段搜索“ Giffords”或“ family”一词,并返回匹配的文档。

我们还可以针对特定字段进行自定义评分。在下面的查询中,对所有与“名称”字段中的关键字匹配的文档给予5的提升

POST fb-post/_search

{

  "query": {

    "multi_match" : {

      "query":    "Giffords family",

      "fields": [ "name^5", "description" ]

    }

  }

}

3. query_string查询

另一个有用的查询是query_string查询。它与匹配查询类似,但此处搜索关键字的格式很重要。它需要特定的格式,并且如果搜索关键字的格式不同,则会返回错误。

考虑以下查询:

POST fb-post/_search

{

    "query": {

        "query_string" : {

            "query" : "(step down) OR (official act)"

        }

    }

}

在此,搜索关键字首先分为两部分,即“或”条件的左侧和“或”条件的右侧。也就是说,搜索查询中的运算符用作定界符。然后将对每个部分进行分析(根据要查询的字段,在上面的示例中查询所有字段,它将进行标准分析),然后进行查询。

也可以对特定的一个或多个字段进行查询,如下所示:

POST fb-post/_search

{

    "query": {

        "query_string" : {

            "query" : "(step down) OR (official act)",

            "fields" : ["description","name"]

        }

    }

}

4. match_phrase查询

Match_phrase查询是一个特别有用的查询,它寻找匹配短语而不是单个单词。在下面给出的示例中,match_phrase查询以相同顺序获取与单词“ deeply关心”匹配的文档。

POST fb-post / _search

{

    “ query”:{

        “ match_phrase”:{

            “ description”:“ 密切关注 ”

        }

    }

}即使更改了单词顺序,match_phrase查询的一个非常有用的自定义设置也会匹配。例如,如果我们希望“深切关注”和“深切关注”相匹配,则可以将slop参数与match_phrase查询一起使用,如下所示:

POST fb-post/_search

{

    "query": {

        "match_phrase" : {

            "description" : "deeply concerned"

        }

    }

}

slope值默认为0,最大范围为50。在上面的示例中,slope值2表示可以将这些词视为匹配项的范围。

现在考虑以下查询,在该查询的末尾加上不完整的关键字“ ab”。该match_phrase查询没有提供火柴,即使存在具有“深切关注文档此查询有关 ” 短语中的“描述”字段

POST fb-post/_search

{

    "query": {

        "match_phrase": {

            "description" : {

                "query" : "deeply concerned",

                "slop": 2

            }

        }

    }

}

5. match_phrase_prefix查询

在上面的示例中,我们看到match_phrase查询需要精确的短语来进行匹配。但是有时候,如果我们也可以使用match_phrase_prefix查询来匹​​配部分匹配项,那将很方便。“ match_phrase_prefix”查询可帮助我们实现此类匹配。

POST fb-post/_search

{

    "query": {

        "match_phrase" : {

            "description" : "deeply concerned ab"

        }

    }

}

上面的查询可以像下面搭配词组:

“deeply concerned about”

“deeply concerned above”

一个实际的用例是邮政编码的自动完成实现,其中用户键入部分短语。

结论

在此博客中,我们看到了Elasticsearch查询世界中的一些重要的全文查询。我将在下一个博客中介绍术语级别查询,然后再返回一些特殊的全文查询,这将有助于更好地理解。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355

推荐阅读更多精彩内容