在Solr 6.6.2上拥有以下设置:
一个Solr云集合,其中文档具有ID、ContactId、Properties字段,并且唯一键为id。
可以存在多个具有相同ContactId的文档。
每个联系人文档都有一个文本字段属性,包含一行文本。属性字段使用逗号分隔进行索引,例如:Properties:Green hits。
例如:
+----+-----------+--------------+
| ID | ContactId | Properties |
+----+-----------+--------------+
| 1 | C1 | Blue,Green |
| 2 | C1 | Blue,Yellow |
| 3 | C2 | Green,Yellow |
+----+-----------+--------------+
现在我需要查找所有属性为“Green”和“Yellow”的联系人ID,允许此查询匹配该联系人ID的所有文档。因此,在这种情况下,结果将为C1,C2。
我尝试对结果进行分组,但仍然无法在分组结果上进行查询。
group=true&group.field=ContactId&group.query=(Green AND Yellow)&q=(Green OR Yellow)
我遵循的想法是查询(q)以获取所有既有绿色又有黄色的文档,然后按组.field ContactId进行分组,然后使用绿色和黄色的AND条件进行group.query。但这并没有成功。
在MySQL中,只需执行以下操作:
group_concat(Properties) as grouped
并对该字符串执行类似操作:
grouped LIKE '%Green%' AND grouped LIKE '%Yellow%'
我应该如何在Solr索引上执行此查询?
已经尝试过建议使用引号和不使用引号:
intersect(
search(w3, q=Properties:("Green"), fl="ContactId", sort="ContactId asc"),
search(w3, q=Properties:("Yellow"), fl="ContactId", sort="ContactId asc"),
on="ContactId" )
源自Solr交集示例:
intersect(
search(w3, q=Properties:("Green" OR "Green" AND "Yellow"), fl="ContactId", sort="ContactId asc"),
search(w3, q=Properties:("Yellow" OR "Green" AND "Yellow"), fl="ContactId", sort="ContactId asc"),
on="ContactId" )
但是搜索结果仅显示两个属性在同一文档内的情况,而不是它们分别在同一ContactId下的多个文档中(此时仅显示C2,而不是C1)。