中间件

ES入门3-全文检索概述

2018-05-06  本文已影响0人  加碘盐_ed6c

全文检索定义

全文检索是将存储于数据库中整本书、整篇文章中的任意内容信息查找出来的检索。它可以根据需要获得全文中有关章、节、段、句、词等信息,也就是说类似于给整本书的每个字词添加一个标签,也可以进行各种统计和分析。类似于mysql里的like语句。例如,它可以很快的回答“《红楼梦》一书中“林黛玉”一共出现多少次?”的问题。

全文索引就是把内容根据词的意义进行分词,然后分别创建索引,例如”你们的激情是因为什么事情来的” 可能会被分词成:“你们“,”激情“,“什么事情“,”来“ 等token这样当你搜索“你们” 或者 “激情” 都会把这句搜出来。


Match Query

比如我们要查询索引为twitter,索引类型为tweet的user为kimchy的文档记录。

curl -XGET  'http://localhost:9200/twitter/tweet/_search'  -d '
{
  "query" :
  {
      "match":{"user":"kimchy"}
  }
}'

Match Query也还包括一些其它的参数:query、operator、zero_terms_query等

{
  "query" :
  {
      "match":{
      "user":"kimchy",
      "message":{
                 "query" : "this is a test",
                 "operator" : "and"
                 }
              }
   }
}

Term Query

term query在给定的字段里查询词或者词组。

curl -XGET  'http://localhost:9200/twitter/tweet/_search' -d '
{
  "query" :
  {
  "term" : { "user" : "Kimchy" }
  }
}
'

Term与Match的区别,如下代实例

curl -XGET  'http://localhost:9200/my_index/my_type/_search' -d '
{
  "query": {
    "match": {
      "full_text": "Quick Foxes!" 
    }
  }
}
'

curl -XGET  'http://localhost:9200/my_index/my_type/_search' -d '
{
  "query": {
    "term": {
      "full_text": "Quick Foxes!" 
    }
  }
}
'

在默认情况下,match是查询匹配"Quick"或者"Foxes!"或者"Quick Foxes!",而term只查询匹配"Quick Foxes!"。


Regexp Query

假设现在你想匹配在W地域(Area)的所有邮政编码,那我们怎样来匹配呢?我们这一节就来介绍一下regexp匹配。

curl -XGET  'http://localhost:9200/my_index/address/_search -d '
{
    "query": {
        "regexp": {
            "postcode": "W[0-9].+" 
        }
    }
}
'

这个正则表达式的规定了词条需要以W开头,紧跟着一个0到9的数字,然后是一个或者多个其它字符。
regexp所要匹配的字段要以正则式的形式出现。如以上代码中"W[0-9].+"。


Range Query

假设现在你想匹配年龄(age)在10到20岁之间的所有信息,我们这一节就来讲解如何匹配,将会用range来匹配。

curl -XGET  'http://localhost:9200/class/students/_search' -d '
{
    "query":{
    "range" : {
        "age" : {
            "gte" : 10,
            "lt" : 20
            }
        }
    }
}
'

其中range的参数包括gt(>)、lt(<)、gte(>=)、lte(<=)、boost。

上一篇 下一篇

猜你喜欢

热点阅读