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(抽象语法树),由两种类型的子句组成:
- 叶查询子句
叶查询子句在特定字段中查找特定值,例如匹配、术语或范围查询。 这些查询可以自己使用。 - 复合查询子句
复合查询子句包装其他叶或复合查询,并用于以逻辑方式组合多个查询(例如 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 内置多个推荐算法,包括: