遍布式搜索引擎Elasticsearch的询问与过滤必发bifa88手机客服端

一、写入

先来一个简约的官方例子,插入的参数为-XPUT,插入一条记下。

curl -XPUT 'http://localhost:9200/test/users/1' -d '{
    "user": "test",
    "post_date": "2009-11-15T14:12:12",
    "message": "Elastic Search"
}'

{
    "_index": "test",
    "_type": "users",
    "_id": "1",
    "_version": 2,
    "_shards": {
        "total": 2,
        "successful": 1,
        "failed": 0
    },
    "created": false
}

从地点的这几个例子中,能够看看ES的http的劳动的暗许端口9200,后边的/test/users/1是那条记下的目录部分,显示了它的RESTful风格

那三级目录遍布对应了_index,``_type,``_id实则ES上存放的有着的记录都只好通过三级目录的不贰秘籍找到

  • _id字段能够是数字也足以是字符串。在实行上边包车型大巴指令时ES会自动创建这个索引

  • -d后边跟上了要插入的json格式的笔录

  • -XPUT注解那是插入一条数据,ES中叫创设1个目录

  • _version字段,注明了脚下记下的本子号,当您想以此目录重新put一条记下时,版本号会自动加1

二、删除

删去的http请求参数为-XDELETE,通过上边包车型地铁吩咐能够去除那条记下:

curl -XDELETE 'http://localhost:9200/test/users/1?pretty'
{
  "found" : true,
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 3,
  "_shards" : {
    "total" : 2,
    "successful" : 1,
    "failed" : 0
  }
}

删除那条记下的时候,_verison也会活动加1的。

三、查询

创制了3个目录后,能够透过上面包车型客车不二等秘书技查询(参数-XGET)出来

curl -XGET 'http://localhost:9200/test/users/1?pretty'       
{
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 1,
  "found" : true,
  "_source" : {
    "user" : "test",
    "post_date" : "2009-11-15T14:12:12",
    "message" : "Elastic Search"
  }
}

奉行下面的查询命令,能够等到下边包车型地铁结果,exists意味着是还是不是有询问结果,_source字段是查询到的笔录。

查询的时候,能够将_type安装成为_all,ES就会回来在_index下具备type中,第3个门户万分_id的笔录,还能透过参数对回到结果两次三番调控,

用田野先生s采用重临的字段,用pretty调节重回的json格式是不是更读书友好

curl -XGET 'http://localhost:9200/test/users/1?fields=message,user&pretty=true'
{
  "_index" : "test",
  "_type" : "users",
  "_id" : "1",
  "_version" : 3,
  "found" : true,
  "fields" : {
    "message" : [ "Elastic Search" ],
    "user" : [ "test" ]
  }
}

format=yaml能够安装输入格式为YAML

curl -XGET 'http://localhost:9200/test/users/1?fields=message,user&format=yaml' 
---
_index: "test"
_type: "users"
_id: "1"
_version: 1
found: true
fields:
  message:
  - "Elastic Search"
  user:
  - "test"

自然ES还援助一次询问多组记录,即multi
get,在UEvoqueI中是利用首要字_mget,具体能够参考ES的文书档案multi
get

四、更新

ES同样支撑立异,但是立异的章程是透过三个提供的本子举行的。

ES的做法是,通过index找到相应的寄放记录的节点,然后执行脚本,执行完事后,重临新的目录。实际上试行的是三个get和reindex的进度,在那几个进程中,通过versioning来决定未有别的的翻新操作(那几个效应是0.1玖后可用的)。具体落成的规律应该和elasticsearch
Versioning
相关。

get,reindex的意义是,ES先抽出那条记下,然后依照新数据变化新记录,然后在把新记录放回到ES中(并不会覆盖老的笔录)。

率先创立一条记下

curl -XPUT localhost:9200/test/type1/1 -d '{
    "counter" : 1,
    "tags" : ["red"]
}'

将counter的值加4

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    }
}'

也得以增多1个tag的值

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.tags += tag",
    "params" : {
        "tag" : "blue"
    }
}'

近期还援救upsert成效,即在更新的时候,假使记录未有这几个key,则插入这些key,上边是3个例证,假如未有counter字段,则插入该字段:

curl -XPOST 'localhost:9200/test/type1/1/_update' -d '{
    "script" : "ctx._source.counter += count",
    "params" : {
        "count" : 4
    },
    "upsert" : {
        "counter" : 1
    }
}'

至于update还有其余众多意义,能够参照ES的API
update

五、搜索

elasticsearch的名字里面有二个search,那么重大作用也是search了。

es的search有三种样式,一是通过UENCOREI,二是经过Requst
Body。通过UEnclaveI查询,将在查询的言语放入到请求的url中,举个例子:

curl -XGET 'http://localhost:9200/twitter/tweet/_search?q=user:kimchy'

其次种方法,即在查询的呼吁中参与贰个doc

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

query body的概念能够查阅query
DSL

其余三种查询格局都能够带参数,参数的意思参考URI
Reques
t和Request
Body

ES的检索效果是能够跨index和type的,举例下边这几条命令

curl -XGET 'http://localhost:9200/twitter/_search?q=user:kimchy'
curl -XGET 'http://localhost:9200/twitter/tweet,user/_search?q=user:kimchy'
curl -XGET 'http://localhost:9200/kimchy,elasticsearch/tweet/_search?q=tag:wow'
curl -XGET 'http://localhost:9200/_all/tweet/\_search?q=tag:wow'
curl -XGET 'http://localhost:9200/\_search?q=tag:wow'

第二条是在具有的twitter本条index下的兼具type中寻觅,第2条是在tweet,user那多个type中探究,第二条是在kimchy,elasticsearch这两个index的tweet其一type中找找,第肆条使用了_all重中之重字,是在具备的index的tweet的type中查找,第陆条更加强力,在装有的index和type中寻觅。

探求还有其余的多多精选,sort高亮,采纳重临记录的域Fields,还是能对回到的域使用叁个本子进行测算script
Fields
,也许对回到结果两次三番总计Facets,Facets的内容比较多,它支持入眼词计算,范围内总结,直方图式总括,日期的直方图式总结,过滤,查询,还有记录地理地方距离的计算geo
distance

援救名字过滤Named
Filters

定义寻觅类型Search
Type
。比如怎样Query
And Fetch,Query Then Fetch。 索引加快的机能Index
Boost
,可以让某一个索引的权重大于其余一个。
保持上次追寻的条件了结果Scroll。保留每贰个命中的score值Explain
设置命中的min_score。保留版本号Version

Search的参数诸多,作者也尚无各样看,可是果然是名字里面有个search,对搜索的种种场合都有支撑。

本来还协助多少个查询multi search,举例上边那一个例子

cat requests
{"index" : "test"}
{"query" : {"match_all" : {}}, "from" : 0, "size" : 10}
{"index" : "test", "search_type" : "count"}
{"query" : {"match_all" : {}}}
{}
{"query" : {"match_all" : {}}}

$ curl -XGET localhost:9200/_msearch --data-binary @requests; echo

六、DSL

1、match

curl -XGET 'localhost:9200/test/_search?pretty' -d'{
    "_source": ["title", "allnum"],
    "query": { 
        "match": { "title": "地铁跑酷" } 
    }
}'

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 6.692047,
    "hits" : [ {
      "_index" : "test",
      "_type" : "external",
      "_id" : "AVicbl1W9iJMapPz5wea",
      "_score" : 6.692047,
      "_source" : {
        "title" : "地铁跑酷",
        "allnum" : 104541
      }
    } ]
  }
} 

来得钦赐字段,相配关键字

结果格式

  • took – 搜索用的微秒

  • timed_out – 搜索超时时间

  • _shards – 搜索了多少个部分 成功搜索多少个 战败了不怎么个

  • hits – 找寻的回来结果集

  • hits.total – 结果的总的数量

  • hits.hits – 实际寻找再次来到的数组

  • _score and max_score – ignore these fields for now

一旦es搜索再次回到给你 该链接就断开了
es并不会想MySQL等等的 平素维护三个总是

 

越多限制条件的搜素

curl -XGET 'localhost:9200/test/_search?pretty' -d'{
    "from": 0, 
    "size": 1,
    "_source": ["title", "allnum"],
    "query": { 
        "match": { "title": "地铁跑酷" }
    },
   "sort": { "allnum": { "order": "desc" }}
}'

2、使用should

curl -XGET 'localhost:9200/test/_search?pretty' -d'{
    "from": 0, 
    "size": 2,
    "_source": ["title", "allnum"],
    "query": { 
        "bool": {
            "should": [
                { "match": { "title": "地铁跑酷" } },
                { "match": { "title": "星猫跑酷" } }
            ]
        }
    },
   "sort": { "allnum": { "order": "desc" }}
}'

3、使用must/must not

curl -XGET 'localhost:9200/test/_search?pretty' -d'{
    "from": 0, 
    "size": 2,
    "_source": ["title", "allnum"],
    "query": { 
        "bool": {
            "must": [
                { "match": { "title": "地铁跑酷" } },
                { "match": { "title": "星猫跑酷" } }
            ]
        }
    },
   "sort": { "allnum": { "order": "desc" }}
}'

自然 must /should/must not 能够联手起来使用 

必发bifa88手机客服端,4、过滤器

curl -XPOST 'localhost:9200/test/_search?pretty' -d'{
    "query": { 
        "filtered": {
            "query": { 
                 "match_all": {} 
              }, 
             "filter": { 
                 "range": { "allumn": { "gte": 20000, "lte": 30000 } } } } 
               }
}'

5、聚合

curl  -XPOST  'localhost:9200/test/_search?pretty' -d'{
    "size": 0, 
    "aggs": { 
        "group_by_state": { 
            "terms": { "field": "state" } }
         }
}'

6、terms 过滤

curl  -XPOST  'localhost:9200/test/_search?pretty' -d'{ 
  "query": { 
    "terms": { 
      "status": [ 
        304, 
        302 
      ] 
    } 
  } 
}

7、range 过滤

curl  -XPOST  'localhost:9200/test/_search?pretty' -d'{ 
  "query": { 
    "range": { 
      "allnum": { 
        "gt": 1 
      } 
    } 
  } 
}

限制操作符包蕴:

  • gt :: 大于

  • gte:: 大于等于

  • lt :: 小于

  • lte:: 小于等于

8、exists 和 missing 过滤

exists 和 missing
过滤能够用来查找文书档案中是还是不是带有钦命字段或从不某些字段,类似于SQL语句中的IS_NULL条件

{ 
    "exists":   { 
        "field":    "title" 
    } 
} 

9、bool 过滤

bool 过滤能够用来归并多少个过滤条件查询结果的布尔逻辑,它包括一下操作符:

  • must :: 七个查询条件的一心合作,相当于 and。
  • must_not :: 四个查询条件的相反相配,相当于 not。
  • should :: 至少有一个查询条件分外, 相当于 or。

这个参数能够分级承接三个过滤条件依然二个过滤条件的数组:

{ 
    "bool": { 
        "must":     { "term": { "folder": "inbox" }}, 
        "must_not": { "term": { "tag":    "spam"  }}, 
        "should": [ 
                    { "term": { "starred": true   }}, 
                    { "term": { "unread":  true   }} 
        ] 
    } 
}

柒、中文分词

创制索引

curl -XPUT http://localhost:9200/index

创设映射

curl -XPOST http://localhost:9200/index/fulltext/_mapping -d'
{
    "fulltext": {
             "_all": {
            "analyzer": "ik_max_word",
            "search_analyzer": "ik_max_word",
            "term_vector": "no",
            "store": "false"
        },
        "properties": {
            "content": {
                "type": "string",
                "store": "no",
                "term_vector": "with_positions_offsets",
                "analyzer": "ik_max_word",
                "search_analyzer": "ik_max_word",
                "include_in_all": "true",
                "boost": 8
            }
        }
    }
}'

为索引加多一些内容

curl -XPOST http://localhost:9200/index/fulltext/1 -d'
{"content":"美国留给伊拉克的是个烂摊子吗"}
'
curl -XPOST http://localhost:9200/index/fulltext/2 -d'
{"content":"公安部:各地校车将享最高路权"}
'
curl -XPOST http://localhost:9200/index/fulltext/3 -d'
{"content":"中韩渔警冲突调查:韩警平均每天扣1艘中国渔船"}
'
curl -XPOST http://localhost:9200/index/fulltext/4 -d'
{"content":"中国驻洛杉矶领事馆遭亚裔男子枪击 嫌犯已自首"}
'

拓展询问

curl -XPOST http://localhost:9200/index/fulltext/_search  -d'
{
    "query" : { "term" : { "content" : "中国" }},
    "highlight" : {
        "pre_tags" : ["<tag1>", "<tag2>"],
        "post_tags" : ["</tag1>", "</tag2>"],
        "fields" : {
            "content" : {}
        }
    }
}
' 

参考

相关文章