gpt4 book ai didi

elasticsearch - 使用multi_match查询时如何克服maxClauseCount错误

转载 作者:行者123 更新时间:2023-12-02 23:55:11 28 4
gpt4 key购买 nike

我的Elasticsearch服务器上有10多个索引。

每个索引具有一个或多个具有不同类型的分析器的字段:关键字,标准,ngram等。

对于全局搜索,我使用的是multi_match,但未指定任何显式的fields

为了查询,我使用elasticsearch-dsl库,代码如下:

def search_for_index(indice, term, num_of_result=10):
s = Search(index=indice).sort({"_score": "desc"})
s = s[:num_of_result]
s = s.query('multi_match', query=term, operator='and')
response = s.execute()
return response.to_dict()['hits']['hits']

我得到很好的结果,搜索工作正常,但是有时有人输入更长的文本,并且我收到 maxClauseCount错误。

例如,当搜索词 term等于:时,会引发错误的搜索:
term=We are working on your request and will keep you posted at the earliest.
或其他任何较长的文字也会引起相同的错误。

您能帮我找出一种更好的全局搜索方法,以便避免这种错误吗?

最佳答案

首先-由于原因而存在此限制。您拥有的 bool(boolean) 子句越多-搜索就越重。将其视为每个子句的文档ID的交叉(AND)或联接(OR)子集。这是非常繁重的操作,这就是为什么最初限制为1024个子句的原因。

一般建议是尝试减少要搜索的字段数。也许您的字段不包含文本数据或仅包含一些内部ID。您可以在multi_match查询期间通过显式指定字段部分将它们划掉。

如果您仍然决定采用当前方法,而您正在使用 Elasticsearch 5.5+ 及更高版本,则可以通过在elasticsearch.yml中添加以下行并重新启动实例来更改它们。

indices.query.bool.max_clause_count: 250000

如果您使用的是 5之前的版本的 Elasticsearch ,则该设置称为index.query.bool.max_clause_count

关于elasticsearch - 使用multi_match查询时如何克服maxClauseCount错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54127388/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com