我有一个如下所示的文档,其中PCL为关键字
{
"name": "test",
"PCL": [
"product1_company1_location1",
"product2_company2_location2"
]
}
我正在尝试查找与数组中给定值完全匹配的所有文档的计数。但是,弹性搜索文档清楚地指出,由于“项”和“项”是“包含运算”,因此没有“完全相等”,并且由于用户可以在数组中拥有尽可能多的元素,因此建议的使用count的解决方案在这里不起作用。
我试图使PCL字段成为由字符分隔的字符串,以区分每个PCL,但是如果字符串的顺序不同,例如P1C1L1_P2C2L2与P2C2L2_P1C1L1,则使用相同PCL的用户不太可能请参阅其他文档。
这是我要解决的查询
GET indexName/_search
{
"query": {
"bool": {
"should": [
{
"bool": {
"must": [
{
"terms": {
"PCL": [
"product1_company1_vendor1",
"product2_company2_vendor2"
]
}
}
]
}
},
{
"bool": {
"must": [
{
"terms": {
"PCL": [
"product1_company1_vendor_1",
"product3_company3_vendor_3"
]
}
}
]
}
}
]
}
},
"aggs": {
"PCL": {
"terms": {
"field": "PCL"
}
}
}
}
是否有使用Elasticsearch来实现这一目标? (注意:我已经决定对PCL进行排序,因此不会出现顺序冲突,并将其存储为字符串,因为不可能在数组中进行完全匹配)
答案 0 :(得分:0)
如果要获得完全匹配,则必须将搜索字符串括在"
中。这将确保检索完全匹配的结果。
例如:
{
"name": "test",
"PCL": [
"\"product1_company1_location1\"",
"\"product2_company2_location2\""
]
}