我在逻辑solr查询上遇到问题。 这是我的索引结构:
"docs":[
{
"id":"doc1",
"type.id": [
"1",
"2",
"3"
],
"type.demande": [
"non",
"non",
"oui"
],
"type.reponse": [
"oui",
"oui",
""
],
"type.traitement": [
"oui",
"oui",
"non"
]
},
{
"id":"doc2",
"type.id": [
"1",
"2",
"3"
],
"type.demande": [
"non",
"non",
"non"
],
"type.reponse": [
"oui",
"oui",
"non"
],
"type.traitement": [
"oui",
"oui",
""
]
}
]
每个字段type.id,demande,reponse和traitement都是多值的。 每种类型都是这4个字段的一组。 防爆。 :来自doc 2的类型id 1具有demande“non”,réponse“oui”,traitement“oui”。 我想查询这些字段的最后一个值来过滤最后插入的类型的值。 例如solr查询:
q=(type.demande:"oui" AND (type.reponse:"" OR type.reponse:"non"))
当我尝试此查询时,似乎solr将搜索匹配字段的任何值。 我在solr docs上搜索过,但是我没有找到“last”或“lastValueOf”的提议,这可以让我这样做。
感谢。
答案 0 :(得分:0)
您不能使用平面文档,但您可以it with child documents。如果这是您要查询的唯一方案,那就是一个更简单的解决方案,那就是创建一个您过滤的辅助值 - 这些字段的合并形式,您可以将其作为单个值进行查询。 / p>
在建立索引时,您将值合并到带分隔符的单个字段中,例如merged_demande_reponse:("oui|non" OR "oui|")
,然后将其作为单个字段进行查询:
{
"id": <generated id>,
"docid": "doc1",
"type.id": "1",
"type.demande": "non"
"type.reponse": "oui"
"type.traitement": "oui"
},
{
"id": <generated id>,
"docid": "doc1",
"type.id": "2",
"type.demande": "non"
"type.reponse": "oui"
"type.traitement": "oui"
},
... etc.
不应以任何方式进一步处理此字段。这个解决方案的好处是每个文档都保持简单,所有功能都可以开箱即用,而不必每次都考虑子文档。
另一个解决方案是将每个组合索引为文档(这是子文档在后台执行的操作)。每个值组合都成为自己的文档,具有通用ID:
{{1}}