文档

Array数组类型说明

更新时间:

本文主要对Array类型的使用场景、数据推送及搜索语法进行系统的介绍,方便大家理解。

什么场景下适合使用ARRAY类型?

Array类型即为数组类型,数组类型即由相同类型的若干个元素组织在一起的数据,期望在搜索的时候对于每一个元素都可以执行单独的查询。比如小说的标签tags,包含“悬疑”、“穿越”、“古典”,希望在搜索“悬疑”的时候能找到该篇小说。

如何推送ARRAY类型的数据?

目前OpenSearch支持多种方式的数据推送方式,那我们就从每个途径来分开阐述如何进行数据推送。

API方式

ARRAY类型需要采用JsonArray的方式来上传数据。如:

[
    {
        "fields": {
            "id": "0",
            "int_array": [
                14,
                85
            ],
            "float_array": [
                14.0,
                85.0
            ],
            "literal_array": [
                "abc",
                "xyz"
            ]
        },
        "cmd": "ADD"
    }
]

具体数据上传接口,请参考开发指南->V3(标准/高级)API参考手册->应用操作接口->数据处理

SDK方式

可以参考JAVA SDK示例:Push推送Demo,其他SDK做法类似。

数据源方式

数据源配置允许用户对于数据源数据进行多种格式的解析操作,如果定义了ARRAY类型的字段,可以在该字段上选择MultiValueSpliter插件,定义好多值分隔符,比如上例中的tags,在数据库表中字段内容为:“穿越,悬疑,言情”,那么多值分隔符为英文逗号:“,”,如图所示即可。该插件会自动将数据库中字段转化成为引擎识别的ARRAY类型。MultiValueSpliter插件

1

ARRAY类型如何进行检索?能实现怎样的效果?

ARRAY类型的每一个元素都可以单独访问,不管是用在query子句,还是filter子句,如上例中的tags字段(内容为:穿越,悬疑,言情),可以通过query=tags:'穿越',来找到该文档;也可以通过query=title:'步步惊心'&&filter=tags="穿越",来实现标签为“穿越”的名字包含“步步惊心”的小说。

同时需要注意一点的是,搜索结果对于Array类型是按照字符串返回的,元素之间使用’\t’分隔,而不是数组。

FAQ

Q1: 为什么没有text_array类型,text与string_array有什么区别?

A: text类型(包含text、short_text、nws_text、mws_text)涉及到分词,本身支持的是模糊搜索,所以没有数组的概念,而string_array指的是每个元素的精确匹配,很可能这里的单个元素本身是由多个词组组成的,但是没关系要求的是全部匹配。

Q2: 有没有方法获得array类型的元素个数?

A: 系统提供了fieldlen函数,可以获取元素个数。

Q3:Java 代码中推送数据,数组类型应该如何传入?

A:通过数组类型的变量传入,例,literal_array--->String [] ,int_array--->int []。

  • 本页导读 (0)
文档反馈