【发布时间】:2018-05-08 16:12:15
【问题描述】:
在 Solr 6.6.2 上进行以下设置:
一个 Solr 云集合,其中包含具有字段 ID、ContactId、属性启动和运行以及 id 上的唯一键的文档。
可以有多个文档具有相同的 ContactId。
每个联系人文档都有一个包含一行文本的文本字段属性。属性字段以“,”分隔索引,例如属性:绿色命中。
例如:
+----+-----------+--------------+
| ID | ContactId | Properties |
+----+-----------+--------------+
| 1 | C1 | Blue,Green |
| 2 | C1 | Blue,Yellow |
| 3 | C2 | Green,Yellow |
+----+-----------+--------------+
现在我需要查找属性具有“绿色”和“黄色”的所有 ContactId,其中允许此查询匹配此 ContactID 的所有文档。所以在这种情况下,结果将是 C1,C2。
我尝试对结果进行分组,但仍然无法查询分组结果。
group=true&group.field=ContactId&group.query=(Green AND Yellow)&q=(Green OR Yellow)
我遵循的想法是 query(q) 用于获取所有具有绿色或黄色的文档,而不是在 group.field ContactId 上进行分组,然后是 group.query 与绿色和黄色的 AND 条件。 但这并没有成功。
在 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)。
【问题讨论】:
-
您需要使用现有的数据模型吗?那么您是否无法加入索引时间?
-
不,我无法更改