gpt4 book ai didi

elasticsearch - ElasticSearch AND对complexType对象字段的操作

转载 作者:行者123 更新时间:2023-12-03 01:40:48 24 4
gpt4 key购买 nike

我有一个具有以下映射的 Elasticsearch 索引:

{
"index_one": {
"mappings": {
"uidMapping": {
"_all": {
"enabled": false
},
"_source": {
"enabled": false
},
"properties": {
"age": {
"type": "keyword"
},
"clean_url": {
"type": "keyword",
"index": false,
"fields": {
"hash": {
"type": "murmur3"
}
}
},
"gender": {
"type": "keyword"
},
"segment_aggregate": {
"properties": {
"segment_name": {
"type": "keyword"
},
"segment_value": {
"type": "keyword"
}
}
},
"url_md5": {
"type": "keyword",
"index": false
},
"url_page_views": {
"type": "integer",
"index": false
}
}
}
}
}
}

我正在尝试对segment_aggregate字段使用AND操作运行查询,即,仅当两个条件都满足时才返回查询结果。到目前为止,我已经使用BoolQueryBuilders在Must Clauses中尝试了Match查询和term查询,但是似乎总是使用segment_name和segment_value之间的or运算来获得结果。
 BoolQueryBuilder queryTest = new BoolQueryBuilder();  
queryTest.must(QueryBuilders.matchQuery("segment_aggregate.segment_name",
"AnyValue").operator(Operator.AND));

queryTest.must(QueryBuilders.matchQuery("segment_aggregate.segment_value",
"A").operator(Operator.AND));

parentQuery.must(queryTest);

这将返回两个字段(基本上是较大的子集)的OR结果。
也尝试过:
mustQuery.must(QueryBuilders.termsQuery("segment_aggregate.segment_name", "SegmentName"));
mustQuery.must(QueryBuilders.termsQuery("segment_aggregate.segment_value", "SegmentValue"));

这也不会产生期望的结果。
即使当我尝试在另一个查询中包装带有必须子句的子查询并添加到父查询中时,这种方法也行不通。

关于我要去哪里的任何想法?

最佳答案

您看到的问题可能是因为您没有将segment_aggregate类型标记为嵌套

默认情况下,所有字段都是独立索引的。即使JSON结构看起来像是将segment_aggregate中内部对象内的特定值关联在一起,但实际上ES仍在为 segment_aggregate.segment_name 创建值索引,并为 segment_aggregate.segment_value 创建单独索引。

这意味着当您进行这样的搜索(假设查询字符串)时:

segment_aggregate.segment_name:color AND segment_aggregate.segment_value:green 

Elasticsearch真正在做的是搜索一个文档,其中 segment_aggregate.segment_name 中的任何值都设置为“color”,而 segment_aggregate.segment_value 中的任何值都设置为“绿色”。要告诉Elasticsearch您想使用内部对象中字段之间的关联,您需要将 segment_aggregate的类型标记为“嵌套”,而不是默认的“object”。另外,您将需要使用查询DSL的特殊嵌套查询和嵌套聚合部分。

更多详情可在这找到:
https://www.elastic.co/guide/en/elasticsearch/reference/current/nested.html

关于elasticsearch - ElasticSearch AND对complexType对象字段的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47888023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com