成人激色综合天天,中文亚洲av片在线观看,又粗又大又硬毛片免费看,国产aⅴ精品一区二区三区久久,亚洲欧美自偷自拍视频图片

這才是最牛逼的搜索引擎

CIOAge
Elasticsearch是一個(gè)可伸縮的開(kāi)源全文搜索和分析引擎,它使你可以快速且接近實(shí)時(shí)的去保存,查詢和分析海量的數(shù)據(jù),他的潛在應(yīng)用場(chǎng)景是作為一些有復(fù)雜搜索功能和需求的應(yīng)用的搜索引擎

 

[[186176]]

簡(jiǎn)介

Elasticsearch是一個(gè)基于Apache Lucene(TM)的開(kāi)源搜索引擎。無(wú)論在開(kāi)源還是專有領(lǐng)域,Lucene可以被認(rèn)為是迄今為止最先進(jìn)、性能最好的、功能最全的搜索引擎庫(kù)。
但是,Lucene只是一個(gè)庫(kù)。想要使用它,你必須使用Java來(lái)作為開(kāi)發(fā)語(yǔ)言并將其直接集成到你的應(yīng)用中,更糟糕的是,Lucene非常復(fù)雜,你需要深入了解檢索的相關(guān)知識(shí)來(lái)理解它是如何工作的。Elasticsearch也使用Java開(kāi)發(fā)并使用Lucene作為其核心來(lái)實(shí)現(xiàn)所有索引和搜索的功能,但是它的目的是通過(guò)簡(jiǎn)單的RESTful API來(lái)隱藏Lucene的復(fù)雜性,從而讓全文搜索變得簡(jiǎn)單。

與關(guān)系型數(shù)據(jù)庫(kù)對(duì)比

Relational DB -> Databases -> Tables -> Rows -> Columns
Elasticsearch -> Indices -> Types -> Documents -> Fields

Elasticsearch集群可以包含多個(gè)索引(indices)(數(shù)據(jù)庫(kù)),每一個(gè)索引可以包含多個(gè)類型(types)(表),每一個(gè)類型包含多個(gè)文檔(documents)(行),然后每個(gè)文檔包含多個(gè)字段(Fields)(列)

基礎(chǔ)概念

near realtime(NRT)
es是一個(gè)接近實(shí)時(shí)的搜索平臺(tái),這意味著你查詢一個(gè)文檔的時(shí)候有一個(gè)延時(shí)。大約一秒

cluster

集群是一個(gè)或多個(gè)節(jié)點(diǎn)(服務(wù)器)的集合在一起,保存所有的數(shù)據(jù),聯(lián)合所有節(jié)點(diǎn)一起提供查詢能力。
一個(gè)集群有一個(gè)唯一的名字,默認(rèn)是“elasticsearch",集群名很重要,因?yàn)榧汗?jié)點(diǎn)加入集群的唯一方式是根據(jù)這個(gè)名字。

node

節(jié)點(diǎn)的默認(rèn)名字是漫威的一個(gè)角色,默認(rèn)加入集群elasticsearch

index

索引是一系列具有相似特點(diǎn)文檔的集合
實(shí)際上,索引只是一個(gè)用來(lái)指向一個(gè)或多個(gè)分片(shards)的“邏輯命名空間(logical namespace)

「索引」含義的區(qū)分
你可能已經(jīng)注意到索引(index)這個(gè)詞在Elasticsearch中有著不同的含義,所以有必要在此做一下區(qū)分:
索引(名詞) :如上文所述,一個(gè)索引(index)就像是傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)中的數(shù)據(jù)庫(kù),它是相關(guān)文檔存儲(chǔ)的地方,index的復(fù)數(shù)是indices 或indexes。
索引(動(dòng)詞) :「索引一個(gè)文檔」表示把一個(gè)文檔存儲(chǔ)到索引(名詞)里,以便它可以被檢索或者查詢。這很像SQL中的INSERT關(guān)鍵字,差別是,如果文檔已經(jīng)存在,新的文檔將覆蓋舊的文檔。

倒排索引 傳統(tǒng)數(shù)據(jù)庫(kù)為特定列增加一個(gè)索引,例如B-Tree索引來(lái)加速檢索。Elasticsearch和Lucene使用一種叫做倒排索引(inverted index)的數(shù)據(jù)結(jié)構(gòu)來(lái)達(dá)到相同目的。

Type

索引中,類型是一種邏輯的分類,它的意義由使用者來(lái)賦予

mapping

每個(gè)類型(type)都有自己的映射(mapping)或者結(jié)構(gòu)定義,就像傳統(tǒng)數(shù)據(jù)庫(kù)表中的列一樣。所有類型下的文檔被存儲(chǔ)在同一個(gè)索引下,但是類型的映射(mapping)會(huì)告訴Elasticsearch不同的文檔如何被索引
Elasticsearch支持以下簡(jiǎn)單字段類型:
類型 表示的數(shù)據(jù)類型
String string
Whole number byte, short, integer, long
Floating point float, double
Boolean boolean
Date date

document

文檔是搜索信息的基本單元,用json表達(dá),文檔必須被包含于一個(gè)type中

文檔 ID文檔唯一標(biāo)識(shí)由四個(gè)元數(shù)據(jù)字段組成:
_id:文檔的字符串 ID
_type:文檔的類型名
_index:文檔所在的索引
_uid:_type 和 _id 連接成的 type#id

默認(rèn)情況下,_uid 是被保存(可取回)和索引(可搜索)的。_type 字段被索引但是沒(méi)有保存,_id 和_index 字段則既沒(méi)有索引也沒(méi)有儲(chǔ)存,它們并不是真實(shí)存在的。

shards&replicas

es提供能力,讓你把index分成好幾個(gè)部分,叫做分片,當(dāng)你創(chuàng)建索引的時(shí)候,你可以簡(jiǎn)單的定義分片的個(gè)數(shù),每個(gè)分片本身是一個(gè)獨(dú)立的功能齊全的“索引”,可以被放到任何的集群節(jié)點(diǎn)中

分片的意義:
1.可以水平分割和擴(kuò)展數(shù)據(jù)
2.可以把操作分配給多個(gè)分區(qū),提高性能

es允許你制作一個(gè)或多個(gè)分片的副本。叫做復(fù)制分片
復(fù)制分片的意義:
1、他提供了高可用性,副本和原始分區(qū)不處于一個(gè)節(jié)點(diǎn)中。
2.他提高了性能,因?yàn)樗阉骺梢栽谌魏畏謪^(qū)上允許。
每一個(gè)分片是一個(gè)lucene索引,每個(gè)Lucene實(shí)例有一個(gè)最大的存放文檔的數(shù)量。這個(gè)數(shù)量是2417483519

analysis

分析也稱分詞
Elasticsearch中的數(shù)據(jù)可以大致分為兩種類型:
確切值 及 全文文本。
確切值是確定的,正如它的名字一樣。比如一個(gè)date或用戶ID,也可以包含更多的字符串比如username或email地址。
全文文本常常被稱為非結(jié)構(gòu)化數(shù)據(jù),而對(duì)于全文數(shù)據(jù)的查詢來(lái)說(shuō),卻有些微妙。我們不會(huì)去詢問(wèn)這篇文檔是否匹配查詢要求?。 但是,我們會(huì)詢問(wèn)這篇文檔和查詢的匹配程度如何?。換句話說(shuō),對(duì)于查詢條件,這篇文檔的相關(guān)性有多高?

為了方便在全文文本字段中進(jìn)行這些類型的查詢,Elasticsearch首先對(duì)文本分析(analyzes),然后使用結(jié)果建立一個(gè)倒排索引。

分析(analysis)機(jī)制用于進(jìn)行全文文本(Full Text)的分詞,以建立供搜索用的反向索引。

分析(analysis)是這樣一個(gè)過(guò)程:
首先,標(biāo)記化一個(gè)文本塊為適用于倒排索引單獨(dú)的詞(term)
然后標(biāo)準(zhǔn)化這些詞為標(biāo)準(zhǔn)形式,提高它們的“可搜索性”或“查全率”

這個(gè)工作是分析器(analyzer)完成的。一個(gè)分析器(analyzer)只是一個(gè)包裝用于將三個(gè)功能放到一個(gè)包里:
字符過(guò)濾器
1.首先字符串經(jīng)過(guò)字符過(guò)濾器(character filter),它們的工作是在標(biāo)記化前處理字符串。字符過(guò)濾器能夠去除HTML標(biāo)記,或者轉(zhuǎn)換"&"為"and"。
分詞器
2.下一步,分詞器(tokenizer)被標(biāo)記化成獨(dú)立的詞。一個(gè)簡(jiǎn)單的分詞器(tokenizer)可以根據(jù)空格或逗號(hào)將單詞分開(kāi)(譯者注:這個(gè)在中文中不適用)
標(biāo)記過(guò)濾
3.最后,每個(gè)詞都通過(guò)所有標(biāo)記過(guò)濾(token filters),它可以修改詞(例如將"Quick"轉(zhuǎn)為小寫(xiě)),去掉詞(例如停用詞像"a"、"and"、"the"等等),或者增加詞(例如同義詞像"jump"和"leap")

index參數(shù)控制字符串以何種方式被索引。它包含以下三個(gè)值當(dāng)中的一個(gè):
analyzed首先分析這個(gè)字符串,然后索引。換言之,以全文形式索引此字段。not_analyzed索引這個(gè)字段,使之可以被搜索,但是索引內(nèi)容和指定值一樣。不分析此字段。no不索引這個(gè)字段。這個(gè)字段不能為搜索到。
string類型字段默認(rèn)值是analyzed。如果我們想映射字段為確切值,我們需要設(shè)置它為not_analyzed:
{
"tag": {
"type": "string",
"index": "not_analyzed"
}
}其他簡(jiǎn)單類型(long、double、date等等)也接受index參數(shù),但相應(yīng)的值只能是no和not_analyzed,它們的值不能被分析。

Elasticsearch提供很多開(kāi)箱即用的字符過(guò)濾器,分詞器和標(biāo)記過(guò)濾器。這些可以組合來(lái)創(chuàng)建自定義的分析器以應(yīng)對(duì)不同的需求。

string類型的字段,默認(rèn)的,考慮到包含全文本,它們的值在索引前要經(jīng)過(guò)分析器分析,并且在全文搜索此字段前要把查詢語(yǔ)句做分析處理。
對(duì)于string字段,兩個(gè)最重要的映射參數(shù)是index和analyer。

highlight

很多應(yīng)用喜歡從每個(gè)搜索結(jié)果中高亮(highlight)匹配到的關(guān)鍵字,這樣用戶可以知道為什么這些文檔和查詢相匹配。

score

每個(gè)節(jié)點(diǎn)都有一個(gè)_score字段,這是相關(guān)性得分(relevance score),它衡量了文檔與查詢的匹配程度。默認(rèn)的,返回的結(jié)果中關(guān)聯(lián)性最大的文檔排在首位;這意味著,它是按照_score降序排列的。這種情況下,我們沒(méi)有指定任何查詢,所以所有文檔的相關(guān)性是一樣的,因此所有結(jié)果的_score都是取得一個(gè)中間值1
max_score指的是所有文檔匹配查詢中_score的最大值。

refresh

默認(rèn)情況下,每個(gè)分片每秒自動(dòng)刷新一次。這就是為什么說(shuō)Elasticsearch是近實(shí)時(shí)的搜索了:文檔的改動(dòng)不會(huì)立即被搜索,但是會(huì)在一秒內(nèi)可見(jiàn)。

sort

排序
默認(rèn)情況下,結(jié)果集會(huì)按照相關(guān)性進(jìn)行排序 -- 相關(guān)性越高,排名越靠前
字段值排序:
按時(shí)間排序

GET /_search {  "query" : {      "filtered" : {         "filter" : { "term" : { "user_id" : 1 }}     } }, "sort": { "date": { "order": "desc" }} }

返回:

"hits" : {     "total" :           6, "max_score" :       null, <1> "hits" : [ {     "_index" :      "us",     "_type" :       "tweet",     "_id" :         "14",     "_score" :      null, <1>     "_source" :     {          "date":    "2014-09-24",          ...     },     "sort" :        [ 1411516800000 ] <2> }, ... }

_score 是比較消耗性能的, 而且通常主要用作排序 -- 我們不是用相關(guān)性進(jìn)行排序的時(shí)候,就不需要統(tǒng)計(jì)其相關(guān)性
字段值默認(rèn)以順序排列(從小到大 ),而 _score 默認(rèn)以倒序排列。

緩存

過(guò)濾器是怎么計(jì)算的。它們的核心是一個(gè)字節(jié)集來(lái)表示哪些文檔符合這個(gè)過(guò)濾器。Elasticsearch 主動(dòng)緩存了這些字節(jié)集留作以后使用。一旦緩存后,當(dāng)遇到相同的過(guò)濾時(shí),這些字節(jié)集就可以被重用,而不需要重新運(yùn)算整個(gè)過(guò)濾。
集很“聰明”:他們會(huì)增量更新。你索引中添加了新的文檔,只有這些新文檔需要被添加到已存的字節(jié)集中,而不是一遍遍重新計(jì)算整個(gè)緩存的過(guò)濾器。過(guò)濾器和整個(gè)系統(tǒng)的其他部分一樣是實(shí)時(shí)的,你不需要關(guān)心緩存的過(guò)期時(shí)間。

安裝

  1. 首先需要依賴java7以上版本
  2. curl -L -Ohttps://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.3.3/elasticsearch-2.3.3.tar.gz
    tar -xvf elasticsearch-2.3.3.tar.gz
    cd elasticsearch-2.3.3/bin
    ./elasticsearch
  3. 可以在啟動(dòng)的時(shí)候重寫(xiě)集群和節(jié)點(diǎn)的名字
    ./elasticsearch --cluster.name my_cluster_name --node.name my_node_name
  4. 默認(rèn),es使用9200端口提供 restapi訪問(wèn)

安裝配置:

config/elasticsearch.yml  network : host : 10.0.0.4 path: logs: /var/log/elasticsearch  data: /var/data/elasticsearch cluster: name: <NAME OF YOUR CLUSTER> node: name: <NAME OF YOUR NODE>

瀏覽你的集群

es提供了豐富的restapi用于和集群直接通信包括:
1.檢查集群,節(jié)點(diǎn),索引,狀態(tài)和統(tǒng)計(jì)
2.管理集群,節(jié)點(diǎn),索引數(shù)據(jù)和與元數(shù)據(jù)
3.對(duì)索引curd
4.使用高級(jí)搜索功能,比如分頁(yè),排序,過(guò)濾,腳本,聚合和其他很多

集群健康:

curl 'localhost:9200/_cat/health?v'

返回
epoch timestamp cluster status node.total node.data shards pri relo init unassign
1394735289 14:28:09 elasticsearch green 1 1 0 0 0 0 0

顏色 意義
green 所有主要分片和復(fù)制分片都可用
yellow 所有主要分片可用,但不是所有復(fù)制分片都可用
red 不是所有的主要分片都可用

列舉出所有索引:

curl'localhost:9200/_cat/indices?v'

創(chuàng)建一個(gè)索引:

curl -XPUT 'localhost:9200/customer?pretty'

創(chuàng)建一個(gè)文檔:

curl -XPUT 'localhost:9200/customer/external/1?pretty'-d '{ "name": "John Doe"}'

刪除一個(gè)索引:

curl -XDELETE 'localhost:9200/customer?pretty'

修改你的數(shù)據(jù)

替代你的文檔:
curl -XPUT 'localhost:9200/customer/external/1?pretty'-d '
{ "name": "John Doe" }'

curl -XPUT 'localhost:9200/customer/external/1?pretty'-d '  { "name": "Jane Doe" }'

如果指定了id,去創(chuàng)建,之前的那個(gè)會(huì)被覆蓋
如果沒(méi)有指定id,es會(huì)隨機(jī)的生成一個(gè)id

更新文檔:

es并不會(huì)真正的更新文檔,當(dāng)我們進(jìn)行更新操作的時(shí)候,es刪除原來(lái)的文檔,
然后添加一個(gè)新的文檔。

更新文檔也可以使用腳本,動(dòng)態(tài)腳本在1.4.3版本默認(rèn)被禁用
curl -XPOST 'localhost:9200/customer/external/1/_update?pretty'-d '
{ "script" : "ctx._source.age += 5" }'

ctx._source指向要被修改的文檔

es后續(xù)將會(huì)提供能力,類似sql中的 UPDATE-WHERE statement

刪除文檔

curl -XDELETE 'localhost:9200/customer/external/2?pretty'

delete-by-query 插件可以刪除滿足要求的一類文檔

批量操作:

curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '  {"index":{"_id":"1"}}  {"name": "John Doe" } {"index":{"_id":"2"}}  {"name": "Jane Doe" } ' curl -XPOST 'localhost:9200/customer/external/_bulk?pretty' -d '  {"update":{"_id":"1"}} {"doc": { "name": "John Doe becomes Jane Doe" } }  {"delete":{"_id":"2"}} '

瀏覽你的數(shù)據(jù)

查詢API

took: es搜索使用了多少毫秒
timed_out 是否超時(shí)
_shards 告訴我們多少個(gè)分片被搜索,和被成功和失敗搜索的分片的數(shù)量
hits 搜索結(jié)果
hits.total 結(jié)果數(shù)量
hits.hits 搜索結(jié)果的列表(默認(rèn)給出前10個(gè))
_score 評(píng)分

查詢語(yǔ)句:

Query DSL {"query":{"match_all":{}}}

規(guī)定數(shù)目

curl -XPOST 'localhost:9200/bank/_search?pretty'-d '  { "query": { "match_all": {} }, "size": 1 }'

分頁(yè)

curl -XPOST 'localhost:9200/bank/_search?pretty'-d ' { "query": { "match_all": {} },  "from": 10,  "size": 10  }'

規(guī)定返回指定的field

curl -XPOST 'localhost:9200/bank/_search?pretty'-d '  { "query": { "match_all": {} }, "_source": ["account_number", "balance"] }'

match:

curl -XPOST 'localhost:9200/bank/_search?pretty'-d '  { "query":     { "match":         { "account_number": 20          }      }  }'

bool: 加入布爾邏輯

curl -XPOST 'localhost:9200/bank/_search?pretty'-d ' { "query": { "bool": { "must": [ { "match": { "address": "mill" } }, { "match": { "address": "lane" } } ] } } }' curl -XPOST 'localhost:9200/bank/_search?pretty'-d '  { "query": { "bool": { "should": [ { "match": { "address": "mill" } }, { "match": {         "address": "lane" } } ] } } }' curl -XPOST 'localhost:9200/bank/_search?pretty'-d '  { "query": { "bool": { "must": [ { "match": { "age": "40" } } ], "must_not": [ { "match": { "state": "ID" } } ] } } }'

filter

使用filter,es不再計(jì)算相關(guān)性得分,只是嚴(yán)格的按照條件過(guò)濾
比如:range

curl -XPOST 'localhost:9200/bank/_search?pretty'-d ' { "query": { "bool": { "must": { "match_all": {} }, "filter": { "range": { "balance": {     "gte": 20000, "lte": 30000 } } } } } }'

Aggregations

提供能力是分組和提煉你的數(shù)據(jù) 就像sql里面的GROUP BY
es里你可以查詢返回hit和hit的聚合,在一次查詢中
而且可以進(jìn)行多重聚合

安裝state分類,然后返回10個(gè)狀態(tài),按照數(shù)量排序
設(shè)置size=0,不展示hits,因?yàn)槲覀冎魂P(guān)心聚合結(jié)果

SELECT state, COUNT(*) FROM bank GROUP BY state ORDER BY COUNT(*) DESC

平局值 聚合每一種balance的平均值

suggest

lasticsearch 0.9.0.3終于基于AnalyzingSuggester加上了prefix suggestions ,可直接做搜索提示功能,在0.9.0.1之前版本都是使用外部插件實(shí)現(xiàn)的
參考文章
http://www.nosqldb.cn/1376024289369.html
http://www.cnblogs.com/jiuyuehe/p/3840821.html

總結(jié)

es是一個(gè)簡(jiǎn)單又復(fù)雜的產(chǎn)品,還有很多高級(jí)的功能。

拓展

官方文檔:

https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html

elasticSearch中文社區(qū):

http://elasticsearch.cn/

elasticsearch 索引優(yōu)化:

http://itindex.net/detail/52316-elasticsearch-%E7%B4%A2%E5%BC%95-%E4%BC%98%E5%8C%96

與其他相似功能產(chǎn)品對(duì)比:

http://www.cnblogs.com/chowmin/articles/4629220.html

責(zé)任編輯:吳金澤 來(lái)源: 簡(jiǎn)書(shū)
相關(guān)推薦

2017-03-08 13:12:44

編程學(xué)習(xí)

2020-12-10 11:18:47

Redis搜索引擎Java

2011-06-20 18:23:06

SEO

2009-02-19 09:41:36

搜索引擎搜狐百度

2009-09-22 16:23:52

搜索引擎

2020-03-20 10:14:49

搜索引擎倒排索引

2017-08-07 08:15:31

搜索引擎倒排

2016-12-26 13:41:19

大數(shù)據(jù)搜索引擎工作原理

2010-06-13 16:27:28

搜索引擎

2010-04-20 11:43:46

2022-10-08 09:13:18

搜索引擎?站

2012-09-07 13:22:21

搜索搜狗

2012-05-14 11:01:50

搜索引擎微軟

2011-06-22 17:28:51

SEO

2011-06-15 19:09:24

搜索引擎

2020-08-10 14:39:30

搜索引擎

2020-02-24 08:52:08

開(kāi)源索引YaCy

2015-08-31 10:41:58

搜索引擎Google云應(yīng)用

2009-12-10 15:09:46

PHP搜索引擎類

2023-09-21 15:05:12

ChatGPT搜索引擎

51CTO技術(shù)棧公眾號(hào)