被多值字段的solr查询阻止

时间:2018-04-27 14:33:03

标签: solr

我在逻辑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”的提议,这可以让我这样做。

感谢。

1 个答案:

答案 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}}