ElasticSearch 查询时如果不确定字段名如何进行搜索?

166 天前
 NASK

有一个 map 集合,里面 key 的名称不确定,集合元素数量不确定。

我需要查询 map 集合内某个 key 为某个值的数据。如果是把 map 集合转为 json 作为一个字段存到 ES 的应该可以解决,因为这种情况下我的字段名是固定的,我只需要将查询条件分词,然后根据字段名去和对应的 json 去匹配就可以了。

但是如果 map 的 key 是 index 的字段名应该如何搜索呢?

比如查询输入的是 手机品牌(字段名) 小米(值),但是 map 的 key 只有 品牌(字段名)
比如查询输入的是 价格(字段名) 21 (值),但是 map 的 key 只有 手机价格(字段名)

代码如下: 这段代码中 params 变量的 key 会作为字段名,value 会作为字段值

@Data
@NoArgsConstructor
@AllArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
@Document(indexName = "test_index")
public class TopLevelParam implements Serializable {

    public static final String TECH_CODE="techCode";
    public static final String PARAMS="params";
    public static final String PARAMS_PREFIX="params.";

    @Id
    private String techCode;
    
    @Field(type = FieldType.Nested,dynamic = Dynamic.TRUE)
    private Map<String,Object> params =new HashMap<>();

}
1943 次点击
所在节点    Elasticsearch
2 条回复
boneyao
166 天前
不知道 ES 支持这个结构不,
[{ key: "k1", value: "v1"}]

如果支持这个结构就可以实现,Op 看看呢
NASK
166 天前
@boneyao 我试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1121443

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX