全部产品

应用结构&索引结构

应用结构

数据推送到OpenSearch后会先保存到离线数据表中,在此阶段,为了方便用户推送数据,数据表允许用户根据实际业务场景定义多个表(需要指定关联字段),并提供了数据处理的插件。数据处理完毕后会join成一张索引表,这种索引表主要定义搜索属性,供引擎构建索引及查询使用。

这里分别介绍下数据表与索引表的字段对应关系。

数据表字段

数据表主要为数据导入时使用,不同的数据处理插件对类型有不同的要求。具体字段取值范围,请参见系统限制-字段相关部分说明。超过取值范围将溢出或者截断,请务必保证选择类型正确。

类型

说明

INT

int64整型

INT_ARRAY

int64整型数组

FLOAT

浮点型

FLOAT_ARRAY

浮点型数组

DOUBLE

浮点型

DOUBLE_ARRAY

浮点型数组

LITERAL

字符串常量,仅支持精确匹配

LITERAL_ARRAY

字符串常量数组,单个元素仅支持精确匹配

SHORT_TEXT

短文本,长度在100字节内,支持若干分词方式

TEXT

长文本,支持若干分词方式

TIMESTAMP

uint64整型,时间戳数据

GEO_POINT

字符串常量,经纬度字段,格式为:”经度 纬度”

保留字段说明:

  • [‘service_id’, ‘ops_app_name’, ‘inter_timestamp’, ‘index_name’, ‘pk’, ‘ops_version’, ‘ha_reserved_timestamp’] 这些字段名称为保留字段,暂时无法作为字段名称配置

ARRAY数组类型说明:

  • 如果应用字段创建为ARRAY类型,数据源字段映射时,该字段可以关联varchar/string(字符串类型),并使用数据源插件解析数据源字段。

  • 若该ARRAY类型字段使用API/SDK推送,则请按数组类型推送,不要按string推送。如:String[] literal_array = {“阿里云”,”开放搜索”};

时间戳字段说明:

  • INT和TIMESTAMP类型可以映射数据源字段中的datetime/timestamp字段,会自动将其转化为毫秒数。搜索时可以通过range,按时间区间过滤召回。

索引结构

索引结构分为:索引字段和属性字段。其中索引字段为文本类型字段分词,提供检索服务,而属性字段则提供统计、排序、过滤、聚合等功能。

支持创建为索引字段的类型

INT,INT_ARRAY,TEXT,SHORT_TEXT,LITERAL,LITERAL_ARRAY,TIMESTAMP,GEO_POINT

不支持创建为索引字段的类型

FLOAT,FLOAT_ARRAY,DOUBLE,DOUBLE_ARRAY

支持创建为属性字段的类型

INT,INT_ARRAY,LITERAL,LITERAL_ARRAY,FLOAT,FLOAT_ARRAY,DOUBLE,DOUBLE_ARRAY,TIMESTAMP,GEO_POINT

不支持创建为属性字段的类型

TEXT,SHORT_TEXT

组合索引

组合索引是将多个text类型或者多个short_text类型的字段放在一个索引中进行查询,其与多个索引OR 查询略有区别:

假设应用有2个索引,一个组合索引分别对应的字段是:

title_index - title、body_index - body、union_index - title和body

有一条文档内容为:

id:123456,title:开放,body:搜索

当我们用以上三个索引查询时:

#两个索引OR 查询 - 无结果召回
query=title_index:'开放搜索' OR body_index:'开放搜索'

#组合索引 - 可以召回该文档
query=union_index:'开放搜索' 

注意:组合索引的字段类型需要一致,不能混用(short_text+text 暂不支持)。

索引表字段

对于INT及FLOAT类型介绍这里不再累赘(限制详见系统限制),重点介绍下各索引分析器类型。

内置分析器介绍

搜索效果如何跟分词有很大的关系,分词方式直接影响最终的搜索效果展示,目前系统支持若干的分词方式,需要根据实际业务场景的需求选择合适的字段类型。

接下来,我们详细说明下各个字段的展现效果及适用场景,供大家参考。

关键字

不分词,适合一些需要精确匹配的场景。如标签、关键词等,不分词的字符串或数值内容。该分析器适用于LITERAL、INT 字段类型。

例如:文档字段内容为“菊花茶”,则只有搜索“菊花茶”的情况下可以召回。

中文-通用分析

按照检索单元做分词,基于中文语义分词,适用于全网通用行业的分词器。属于行业分词类型。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:文档字段内容为“菊花茶”,则搜索“菊花茶”、“菊花”、“茶”、“花茶”等情况下可以召回。

中文-电商分析

适用于电商行业的分词器。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:文档字段内容为“大宝SOD蜜”,则搜索“大宝”、“sod”、“sod蜜”、“SOD蜜”、“蜜”等情况下均可以召回。

中文-单字分析

按照单字/单词分词,适合非语义的中文搜索场景,如小说作者名称、店铺名等。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:文档字段内容为“菊花茶”,则搜索“菊花茶”、“菊花”、“茶”、“花茶”、“菊”、“花”、“菊茶”等情况下可以召回。

模糊分析

仅适用于SHORT_TEXT短文本类型,支持拼音搜索、数字的前后缀搜索(

中文不支持前后缀匹配搜索,字母,数字及拼音,这些都支持前后缀匹配

)、单字或者单字母搜索。最多支持100个字节字段长度,更多介绍及注意事项参见模糊搜索使用说明

例如:文档字段内容为“菊花茶”,则搜索“菊花茶”、“菊花”、“茶”、“花茶”、“菊”、“花”、“菊茶”、“ju”、“juhua”、“juhuacha”、“j”、“jh”、“jhc”等情况下可以召回。
例如:文档字段内容为手机号“13812345678”,则通过“^138”来搜索以“138”开头的手机号,通过“5678$”搜索以“5678”结尾的手机号。
例如:文档字段内容为“OpenSearch”,则通过单个字母或者组合都可以检索到。

英文-去词根分析

适合于英文语义搜索场景,对于分词后的每个英文单词默认会做去词根、单复数转化。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:文档字段内容为“英文分词器 english analyzer”,则搜索“英文分词器”、“english”、“analyz”、“analyzer”、“analyzers”、“analyze”、“analyzed”、“analyzing”等情况下可以召回。
(注意:英文分词器中连续的中文会被分成一个词)

英文-不去词根分析

适合于英文书名、人名等搜索场景,按照空格及标点符号做分词。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:文档字段内容为“英文分词器 english analyzer”,则搜索“英文分词器”、“english”、“analyzer”等情况下可以召回。。
(注意:英文分词器中连续的中文会被分成一个词)

拼音全拼分析

仅适用于SHORT_TEXT短文本类型,支持对短文本中的汉字,按照首字母和拼音全拼进行检索。适用于人名、电影名等需要简拼和全拼搜索的场景,而且全拼检索时必须输入汉字的全拼,不能只输部分。

例如:文档字段内容为“大内密探007”,则搜索“d”、“dn”、“dnm”、“dnmt”、“dnmt007”、“da”、“danei”、“daneimi”、“daneimitan”等都可以召回。搜索“an”、“anei”等无法召回。

拼音简拼分析

仅适用于SHORT_TEXT短文本类型,支持对短文本中的汉字,按照首字母进行检索。适用于人名、电影名等需要简拼搜索的场景。

例如:文档字段内容为“大内密探007”,则搜索“d”、“dn”、“dnm”、“dnmt”、“dnmt0”、“dnmt007”、“m”、“mt”、“mt007”、“007”等都可以召回。

简单分析

适合特殊场景下系统自带无法解决的搜索场景,可以实现完全用户控制的效果。推送文档及搜索时使用制表符“\t”对字段内容(或查询词)进行分隔,注意二者分词的一致性,否则会导致无法召回文档的情况。该分析器适用于TEXT、SHORT_TEXT字段类型。

例如:字段内容为“菊\t花茶\thao”,则只有查询词“菊”、“花茶”、“菊\t花茶”、“花茶\thao”、“菊\thao”、“菊\t花茶\thao”可以召回该文档。

数值分析

适合需要按时间区间查询和数值类区间查询的搜索场景。该分析器适用于INT、timestamp字段类型。

例如:query=default:'开放搜索' AND index:[number1,number2]
//此处index为配置了数值分析的索引名字。

数值分析具体的语法以及用法请点击此处查看。

地理位置分析

适用于需要地理位置区间查询的场景。该分析器适用于geo_point字段类型。

例如:query=spatial_index:'circle(116.5806 39.99624, 1000)'
//查询圆内的点, 可以用于附近若干公里的点查询

地理位置分析具体的语法以及用法请点击此处查看。

IT-内容分析

适用于面向IT行业的技术性内容的分词器,属于行业分词;和通用分词器相比,对一些IT技术相关的词分词结果会不一样。该分析器适用于TEXT,SHORT_TEXT字段类型。

例如:原始内容:c++数组使用注意事项
通用分析:c ++数组使用注意事项
IT-内容分析:c++数组使用注意事项

自定义分析器

行业分析器(通用分析/电商分析/人名分析)+自定义干预词条。具体用法参考自定义分析器文档。该分析器适用于TEXT、SHORT_TEXT字段类型。

适用场景

  • 有语义环境的中文搜索,建议使用中文语义分词;

  • 对于短文本或者非语义环境中文搜索(对排序没有太多要求),建议使用中文单字分词来扩大召回;

  • 拼音搜索请使用模糊分词;

  • 英文场景下请使用英文去词根分词;

  • 某些场景下,中文语义分词及单字分词搭配使用,可以获得非常好的搜索效果。如查询query=title_index:’菊花茶’ OR sws_title_index:’菊花茶’,业务排序表达式为:text_relevance(title)*5+field_proximity(sws_title)。可以实现包含“xx菊xx花xx茶xx”的文档,且排序上“菊花茶”会排在前面。

注意事项

  • 如果TEXT字段设置了搜索结果摘要,扩展检索单元部分词组(如上例中的“花茶”)将不会被添加飘红标签。

  • 中文单字分词对于数字跟单词认为是一个词,如“hello word”,搜索“hello”可以召回,搜索“he”则无法召回,敬请注意。若需要做单词内召回,请选择模糊分词。

  • 应用结构中的主表的主键,默认会被设置为索引字段,且索引字段名称默认为“id” ,不支持修改配置。