Skip to main content

Indexea 基本概念

本文档详细介绍 Indexea 相关的概念,方便你快速理解 Indexea 的业务模型。

权限 Permission

  • READ 只读和搜索权限
  • WRITE 允许执行非破坏性的操作,比如新增、修改、删除等
  • ADMIN 除删除应用和添加成员之外的所有操作
  • PAY 允许支付订单以及 READ 操作
  • OWNER 所有者,具有最高权限

应用 App

应用对应你的每一个具体业务,例如一个网店、一个内容网站或者一个社交网站之类的应用系统。每个账号可以创建多个应用,只能有一个免费的体验应用。

当你注册成为 Indexea 用户,系统会自动帮你创建一个默认应用,你可以修改或者删除此默认应用。同时我们会将你的账号添加成为 Indexea Demo 应用的只读成员,你可以浏览这个演示应用的数据、查询等相关信息,当不能对其进行修改。

你可以把 应用 等同于常规项目中的 数据库

索引 Index

索引包含一堆有相似结构的文档数据,比如可以有一个客户索引,商品分类索引,订单索引。

索引归属于 应用,如果应用是数据库,那么索引就是数据库中的一个表。你可以往索引里添加多条记录,执行查询等操作。你也可以对索引数据执行 导入导出 的操作。

关于索引管理的详细信息请看 这里

分片 Shards

单台机器无法存储大量数据,我们可以将一个索引中的数据切分为多个分片,分布在多个搜索节点上存储。有了分片就可以横向扩展,存储更多数据,让搜索和分析等操作分布到多台服务器上去执行,提升吞吐量和性能。

分片的数量必须在创建索引前确定下来,并且创建索引后不可修改该索引分片数量。

在 Indexea 中,体验版的应用只能有一个分片,在将应用转成付费版本时可以指定 1~5 个分片数量,更多的分片需要跟售前联系。

副本 Replicas

任何一个服务器随时可能故障或宕机,此时 分片 可能就会丢失,因此可以为每个分片创建多个 副本。副本可以在分片故障时提供备用服务,保证数据不丢失,多个副本还可以提升搜索操作的吞吐量和性能。

在 Indexea 中,体验版应用下的索引没有副本,在将应用转成付费版本时可以指定 1~5 个副本数量,副本数量可以动态的调整,更多的副本需要跟售前联系。

记录 Record

记录是 Indexea 的最小数据单元,一个记录可以是一条客户数据,一条商品分类数据,一条订单数据,通常用 JSON 数据结构表示。
一条记录中包含多个字段。

字段 Field

字段是记录中的一个数据单元,一个字段可以是一个数字,一个字符串,一个日期,一个数组,一个对象等。
例如,一个订单记录中可以包含客户名称,订单号,订单金额,订单日期等字段。

查询 Query

Indexea 提供了基于 JSON 的完整 Query DSL(Domain Specific Language)来定义查询。 将查询 DSL 视为查询的 AST(抽象语法树),由两种类型的子句组成:

  1. 叶查询子句
    叶查询子句在特定字段中查找特定值,例如匹配、术语或范围查询。 这些查询可以自己使用。
  2. 复合查询子句
    复合查询子句包装其他叶或复合查询,并用于以逻辑方式组合多个查询(例如 bool 或 dis_max 查询),或改变它们的行为(例如 constant_score 查询)。

查询子句的行为不同,具体取决于它们是用于查询上下文还是过滤器上下文。

Indexea 底层使用的是 ElasticSearch,它完全支持 ElasticSearch 的各种查询语法,详情请看 https://www.elastic.co/guide/en/elasticsearch/reference/7.10/query-dsl.html

分词 Analyzer

分词技术是搜索引擎的核心。全文搜索与常规的数据库检索不同,全文搜索依赖对内容的分词,分词的准确与否决定后续搜索的结果是否准确。

在英文的行文中,单词之间是以空格作为自然分界符的,而中文仅仅字、句和段能通过明显的分界符来简略划界,唯独词没有一个形式上的分界符,尽管英文也同样存在短语的区分问题,不过在词这一层上,中文比英文要杂乱的多、艰难的多。

中文分词是文本内容挖掘的基础,每当用户输入的一段中文,搜索引擎成功的进行中文分词,能够到达电脑自动识别语句含义的作用。中文分词技术属于自然语言处理技术范畴,对于一句话,人能够通过自己的知识有明白哪些是词,哪些不是词,但如何让计算机也能理解?这个处理方法即是分词算法。

Indexea 除了提供 ElasticSearch 内建的几个非中文的分词器之外,还提供了基于 NLP 技术的中文分词器 ideaseg

查询变量 Variable

在 Indexea 中你可以预设查询,而后直接通过该查询的标识符在 API 中调用对应查询并获得查询结果。

在常规的搜索场景中,搜索用户会输入搜索关键词,进行一些条件过滤,选择排序方法。这些搜索关键词、过滤条件以及排序方法就可以通过 查询变量 传递给预设的查询对象。

例如:content: ${input} 中的 ${input} 就是一个查询变量,Indexea 会自动将该变量替换成搜索页面中传递过来的参数。

查询变量的语法:${xxxxx} ,其中 xxxxx 就是变量名,该变量名对应 HTTP 请求参数的名称可以在索引设置中的 自定义查询变量 里进行配置。

关键词绑定 Keyword Binding

有些时候,我们希望在用户搜索某些关键词时候,优先显示某些结果。例如公司刚推出某个新款的手机,我们希望用户在搜索手机的时候,优先显示这款新手机。

或者类似百度搜索引擎中,购买关键字广告的效果。

这就可以借助 关键词绑定 来实现置顶指定记录的效果。

聚合 Aggregation

聚合将搜索结果汇总为指标、统计信息或其他分析。聚合可帮助您回答以下问题:

  • 我搜索的这些商品中有多少个品牌,它们的价格分布是怎样的?
  • 我搜索的这些商品都是哪一年出品的,每一年出品了多少商品
  • 根据交易量,谁是我最有价值的客户?
  • 等等

Indexea 支持以下三种聚合类型:

  • Bucket - 分桶类型:类似 SQL 中的 GROUP BY 语法 (满⾜特定条件的⽂档的集合)。
  • Metric - 指标分析类型:如计算最⼤值、最⼩值、平均值等等 (对桶内的⽂档进⾏聚合分析的操作)。
  • Pipeline - 管道分析类型:基于上⼀级的聚合分析结果进⾏再分析。

模板 Template

Indexea 为你提供了一些开箱即用的搜索模板,这些模板可用于 Web 网站搜索、小程序搜索等场景。你可以根据自己的需求来自定义模板。

目前提供的模板有:

你可以根据自身应用的技术栈选择合适的模板,快速将搜索功能集成到已有项目中,也可以独立使用。

组件 Widgets

与模板不同,组件是 Indexea 封装好的一些 UI 搜索组件,可以让你快速集成到已有项目中。例如搜索框组件、搜索推荐组件、搜索结果组件等等。

推荐 Recommend

日常应用中,我们需要根据某些特定的条件为用户推荐一些相关内容,例如阅读某篇文章时显示相关的文章,或者搜索某个关键词时显示相关的结果 (详细介绍)。

Indexea 内置多个推荐算法,包括:

  • 相似推荐
    例如阅读某篇文章时,可以推荐相似的其他文章。
  • 相关推荐
    推荐用户可能会感兴趣的产品,例如搜索零食的时候,给用户推荐饮料。
  • 热门推荐
    给用户推荐最近被搜索最多最热门的商品
  • 个性化推荐
    根据当前搜索用户的搜索喜好,给他推荐可能感兴趣的商品
  • 社交推荐
    根据当前搜索用户的社交圈子的喜好,给他推荐可能感兴趣的商品