在solr index中考虑以下文档。
{
"id": "580ddd10a5a18387fba12f1b5805374872931533336fa0ce",
"conceptid": "580ddd10a5a18387fba12f1b",
"storeid": "5805374872931533336fa0ce",
"startTime": "2016-10-21T15:36:08Z",
"endTime": "2016-10-24T15:36:08Z",
"update": "2016-10-24T15:36:08Z",
"conceptLocations": [
"POINT (-82.540283 40.15736)", (p1)
"POINT (-54.316406 -16.056371)" (p2)
"POLYGON (.....) " (pl1)
],
"concept_name": [
"event6"
],
"tags": [
"Tag 2g",
"Tag 2a"
],
"_version_": 1549065073902747600,
"score": 1
}
此文档有两个点存储在多值字段conceptLocations
中,因此这些点存储在一个数组中。因此,如果我们使用与这些点的 任何一个 匹配的过滤器进行查询,则应返回此文档。类似地,如果我们使用过滤器tags:"Tag 2a"
进行查询,则还应返回此文档,即对于多值字段,任何一个值都应与要选择的文档匹配。对于除conceptLocations
运算符外的isWithin
字段以外的所有多值字段,此功能正常。
对于conceptLocations字段,如果我们执行以下类型的查询,则不会返回任何文档。
conceptLocations: "IsWithin( Polygon around point p1 only )" // doesn't return document
理想情况下,由于conceptLocations的一个值与filter匹配,因此应返回该文档。有趣的是,它适用于Intersects运算符。查询,
conceptLocations: "Intersects( Polygon around point p1 only )" // returns document
按预期返回文档。
此外,如果我们将geoWithin与覆盖p1和p2的多边形一起使用,则返回文档。
conceptLocations: " IsWithin( Polygon covering both p1 and p2 )" // returns document
我不确定这是否是solr中的错误,但是即使只有一个多值字段的值与过滤器匹配,也应返回过滤文档的标准规则。知道为什么不是这里的情况或者我错过了什么? Solr版本是5.0.0。