高级查询功能

更新时间: 2025-02-26 16:05:53

独立一阶段查询

通过在config中增加no_summary参数,用户可以选择是否只进行第一阶段查询,默认为no。当用户选yes后,查询在第一阶段结束后直接返回。

返回结果

结果中除了包含hit信息外,还有gid信息,pk信息(如果配了pk索引),attribute信息(如果第一阶段查询取了attribute)等。

其中

gid := 集群名称|索引全量版本|索引增量版本|hashId|docId|primaryKey的hash值|searcher的Ip

查询示例

config=no_summary:yes,start:0,hit:2&&cluster=daogou&&query=test&&attribute=attr1

结果示例

<Root>
<TotalTime>0.000</TotalTime>
<SortExprMeta><![CDATA[-RANK]]></SortExprMeta>
<hits numhits="1" totalhits="1" coveredPercent="100.00">
      <hit cluster_name="daogou" hash_id="49152" docid="13988568" gid="daogou|1495852466|80|49152|13988568|00000000000000000000000000000000|201042447">
           <fields>
           </fields>
           <property>
           </property>
           <attribute>
                <att1>100</att1>
           </attribute>
           <sortExprValues>1</sortExprValues>
           </hit>
           </hits>
           <AggregateResults>
           </AggregateResults>
           <Error>
                <ErrorCode>0</ErrorCode>
                <ErrorDescription></ErrorDescription>
           </Error>
           </Root>

独立二阶段查询

通过在查询语句中增加fetch_summary clause,用户可以只进行第二阶段查询,即获取summary。详细查询语法请参考fetch_summary子句。

并行查询

功能介绍

并行查询是基于图化架构对查询功能的扩展,将一次查询任务拆分给多个线程,来减少整体查询的延时。用户可以在query中指定并行查询的并发度。并行查询功能适用于容易发生seek timeout,导致召回结果不完全的搜索场景,例如:

  • 存在较为复杂计算逻辑的业务,包括复杂的过滤、统计、算分。

  • 计算存储分离集群,索引字典的lookup和倒排seek经常发生对远端存储的访问。

用法

  • 确定searcher worker运行环境为多核多线程

  • Ha3官方提供2、4、8、16路并行查找功能

  • 在启动参数中,描述ha3 worker需要加载几路并行(ha云上版本默认开启,用户不需要配置),格式如下--env paraSearchWays=2,4,8表示该worker支持2、4、8路并行,如果不指定该启动参数,worker会默认打开2、4路并行

  • 在query中通过指定并行查询图所在的biz,实现对并行功能的访问,例如config=cluster:general.para_search_2, ...."para_search_2"表示该次查询使用2路并行

  • 在query中通过指定并行查询图所在的biz,实现对并行功能的访问,例如config=cluster:daogou.para_search_2, ...."para_search_2"表示该次查询使用2路并行

指定partition查询

功能介绍

在对文档建索引的过程中,引擎会对文档中某个可配置字段的值进行Hash操作,根据得出的hash值(范围为[0 ~ 65535])将文档归类到不同的partition当中。 例如一篇描述商品的文档中,用户将“类型”字段配置为需要进行hash的字段,那么在索引过程中,引擎首先会得到该字段的值,如“女装”,再对“女装”进行hash操作,如hash后的值为8。 然后引擎会根据用户配置的partition个数将该篇文档分发到对应的partition中。结合上面的例子,“类型”这个字段即为引擎所指的hash_field,可在集群对应的配置文件 xxx_cluster.json中进行配置。“女装”即hash_field_value。

用户可以让查询语句只在某一个或多个partition中进行查询,引擎支持通过指定hash_field_value来查询对应的partition。

用法示例

  • 在general集群的所有的partition中查询“大衣”

    cluster=general&&query=大衣  
  • 在女装和配件所在的partition上查询“大衣”

    cluster=general:hash_field=女装|配件&&query=大衣
上一篇: fetch_summary子句 下一篇: 查询结果与解析
阿里云首页 智能开放搜索 OpenSearch 相关技术圈