使用 elasticsearch-dsl Percolate 查询的正确方法是什么?


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"
}
]
}
}
}

说到这里,你应该:

  1. 在 ES 索引中设置正确的映射以渗透特定字段。

  2. 在DSL中,仅发送带有"渗透"字段的参数列表,而不是整个ES文档。

希望这对:D有所帮助

相关内容

  • 没有找到相关文章

最新更新