elasticsearch3

Posted rbcd

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了elasticsearch3相关的知识,希望对你有一定的参考价值。

模糊查询
#前缀搜索:prefix

概念:以xx开头的搜索,不计算相关度评分。

注意:
    前缀搜索匹配的是term,而不是field。
    前缀搜索的性能很差
    前缀搜索没有缓存
    前缀搜索尽可能把前缀长度设置的更长

语法:
GET <index>/_search

  "query": 
    "prefix": 
      "<field>": 
        "value": "<word_prefix>"
      
    
  

index_prefixes: 默认   "min_chars" : 2,   "max_chars" : 5


#通配符:wildcard

概念:通配符运算符是匹配一个或多个字符的占位符。例如,*通配符运算符匹配零个或多个字符。您可以将通配符运算符与其他字符结合使用以创建通配符模式。

注意:通配符匹配的也是term,而不是field

语法:
GET <index>/_search

  "query": 
    "wildcard": 
      "<field>": 
        "value": "<word_with_wildcard>"
      
    
  


#正则:regexp

概念:regexp查询的性能可以根据提供的正则表达式而有所不同。为了提高性能,应避免使用通配符模式,如.或 .?+未经前缀或后缀

语法:
GET <index>/_search

  "query": 
    "regexp": 
      "<field>": 
        "value": "<regex>",
        "flags": "ALL",
      
    
  


#模糊查询:fuzzy
混淆字符 (box → fox)
缺少字符 (black → lack)
多出字符 (sic → sick)
颠倒次序 (act → cat)

语法
GET <index>/_search

  "query": 
    "fuzzy": 
      "<field>": 
        "value": "<keyword>"
      
    
  


#短语前缀:match_phrase_prefix

match_phrase:
    match_phrase会分词
    被检索字段必须包含match_phrase中的所有词项并且顺序必须是相同的
    被检索字段包含的match_phrase中的词项之间不能有其他词项

概念:
match_phrase_prefix与match_phrase相同,但是它多了一个特性,就是它允许在文本的最后一个词项(term)上的前缀匹配,如果 是一个单词,比如a,它会匹配文档字段所有以a开头的文档,如果是一个短语,比如 "this is ma" ,他会先在倒排索引中做以ma做前缀搜索,然后在匹配到的doc中做match_phrase查询,(网上有的说是先match_phrase,然后再进行前缀搜索, 是不对的)

参数
    analyzer 指定何种分析器来对该短语进行分词处理
    max_expansions 限制匹配的最大词项
    boost 用于设置该查询的权重
    slop 允许短语间的词项(term)间隔:slop 参数告诉 match_phrase 查询词条相隔多远时仍然能将文档视为匹配 什么是相隔多远? 意思是说为了让查询和文档匹配你需要移动词条多少次?

Elasticsearch 基本概念

章节


Elasticsearch有几个核心概念,先理解这些概念将有助于掌握Elasticsearch。

近实时(Near Realtime / NRT)

Elasticsearch是一个近实时的搜索平台,从生成文档索引到文档成为可搜索,有一个轻微的延迟(通常是一秒钟)。

集群(Cluster)

集群是一个或多个节点(服务器)的集合。集群中的节点一起存储数据,对外提供搜索功能。集群由一个唯一的名称标识,该名称默认是“elasticsearch”。集群名称很重要,节点都是通过集群名称加入集群。

集群不要重名,取名一般要有明确意义,否则会引起混乱。例如,开发、测试和生产集群的名称可以使用logging-dev、logging-test和logging-prod。

集群节点数不受限制,可以只有一个节点。

节点(Node)

节点是一个服务器,属于某个集群。节点存储数据,参与集群的索引和搜索功能。与集群一样,节点也是通过名称来标识的。默认情况下,启动时会分配给节点一个UUID(全局惟一标识符)作为名称。如有需要,可以给节点取名,通常取名时应考虑能方便识别和管理。

默认情况下,节点加入名为elasticsearch的集群,通过设置节点的集群名,可加入指定集群。

索引(Index)

索引是具有某种特征的文档集合,相当于一本书的目录。例如,可以为客户数据建立索引,为订单数据建立另一个索引。索引由名称标识(必须全部为小写),可以使用该名称,对索引中的文档进行建立索引、搜索、更新和删除等操作。

一个集群中,索引数量不受限制。

文档(Document)

文档是可以建立索引的基本信息单元,相当于书的具体章节。例如,可以为单个客户创建一个文档,为单个订单创建另一个文档。文档用JSON (JavaScript对象表示法)表示。在索引中,理论上可以存储任意数量的文档。

分片与副本(Shards & Replicas)

索引可能存储大量数据,数据量可能超过单个节点的硬件限制。例如,一个索引包含10亿个文档,将占用1TB的磁盘空间,单个节点的磁盘放不下。

Elasticsearch提供了索引分片功能。创建索引时,可以定义所需的分片数量。每个分片本身都是一个功能齐全,独立的“索引”,可以托管在集群中的任何节点上。

分片之所以重要,主要有2个原因:

  • 允许水平切分内容,以便内容可以存储到普通的服务器中
  • 允许跨分片操作(如查询时,查询多个分片),提高性能/吞吐量

分片如何部署、如何跨片搜索完全由Elasticsearch管理,对外是透明的。

网络环境随时可能出现故障,如果某个分片/节点由于某种原因离线或消失,那么使用故障转移机制是非常有用的,强烈建议使用这种机制。为此,Elasticsearch允许为分片创建副本。

副本之所以重要,主要有2个原因:

  • 在分片/节点失败时提供高可用性。因此,原分片与副本不应放在同一个节点上。
  • 扩展吞吐量,因为可以在所有副本上并行执行搜索。

总而言之,索引可以分片,索引分片可以创建副本。复制后,每个索引将具有主分片与副本分片。

创建索引时,可以为每个索引定义分片和副本的数量。之后,还可以随时动态更改副本数量。您可以使用_shrink_split api更改现有索引的分片数量,但动态修改副本数量相当麻烦,最好还是预先计划好分片数量。

默认情况下,Elasticsearch中的每个索引分配一个主分片和一个副本。如果集群中有两个节点,就可以将索引主分片部署在一个节点,副本分片放在另一个节点,提高可用性。

每个Elasticsearch分片都是一个Lucene索引。Lucene索引中的文档数量有限制,在LUCENE-5843中,极限是2,147,483,519(= 整数的最大值 - 128)个文档。可以使用_cat/shardsAPI监视分片大小。

以上是关于elasticsearch3的主要内容,如果未能解决你的问题,请参考以下文章

mysql(一)

ElasticSearchmac安装

linux安装elasticsearch

Elasticsearch设置密码

elasticsearch snapshot快照备份和恢复

ELK日志分析系统(实战!)