deleteByQuery通过XML调用工作,但不是JSON用于多条件查询

时间:2015-06-22 19:28:47

标签: json xml solr

在传递JSON数据与XML数据时,Solr的删除查询语法是否不同?索尔的docs相当含糊。我在Java 1.8上的Mac OSX上使用Solr 5.0.0。

以下是我本地方框中的curl命令。

curl -v http://localhost:8983/solr/nZ/update -H "Content-Type: application/json" --data-binary

[
{
    "delete": {
        "query":"UserId:5629499534213120 AND SessionId:5066549580791808 AND Kind:event"
    }
}
]

输出:

{
    "responseHeader": {
        "status": 400,
        "QTime": 2
    },
    "error": {
        "msg": "Document is missing mandatory uniqueKey field: Id",
        "code": 400
    }
}

通过XML运行它:

curl -v http://localhost:8983/solr/nZ/update -H "Content-Type: text/xml" --data-binary '
<delete>
<query>UserId:5629499534213120 AND SessionId:5066549580791808 AND Kind:event</query>
</delete>
'

这会删除文档和输出:

<?xml version="1.0" encoding="UTF-8"?>
<response>
<lst name="responseHeader"><int name="status">0</int><int name="QTime">57</int></lst>
</response>

我还查询了我要删除的文件。他们只有2个,他们都有Id字段。 Id是字符串和架构的唯一键。 JSON的多条件的查询语法是否与XML不同?

1 个答案:

答案 0 :(得分:1)

Solr中的JSON更新格式有点挑剔。似乎你混合了两个非常相似的结构。数组外部[]结构适用于您只提交没有命令的文档。

对象{}外部结构是指具有命令和文档的时间。

你把这两个混在了一起。尝试删除外部数组结构,看看它是否有帮助。请注意,Solr确实允许/要求对象中的第二种格式的重复键,某些库无法处理生成。在这种情况下,您可能仅限于每个文档的同一更新命令的一个实例。