s = Search(index='test-index').using(client)
q = Q('percolate',
field="query",
documents=list_of_documents)
s = s.query(q)
p = s.execute()
我正在尝试对带有文档列表的索引运行渗透查询,但出现错误
RequestError(400, 'search_phase_execution_exception', 'Field [_id] is a metadata field and cannot be added inside a document. Use the index API request parameters.').
非常感谢任何帮助解决这个问题。
我将开始通过API解释这一点。
Percolate 查询可用于匹配存储在索引中的查询。
使用Percolate字段创建索引时,请指定如下所示的映射:
PUT /my-index
{
"mappings": {
"properties": {
"message": {
"type": "text"
},
"query": {
"type": "percolator"
}
}
}
}
这表示字段message
将是用于渗透查询的字段。
如果要匹配文档列表,则应发送具有此字段的术语列表,如文档中的示例所示:
GET /my-index/_search
{
"query" : {
"percolate" : {
"field" : "query",
"documents" : [
{
"message" : "bonsai tree"
},
{
"message" : "new tree"
},
{
"message" : "the office"
},
{
"message" : "office tree"
}
]
}
}
}
说到这里,你应该:
在 ES 索引中设置正确的映射以渗透特定字段。
在DSL中,仅发送带有"渗透"字段的参数列表,而不是整个ES文档。
希望这对:D有所帮助