gpt4 book ai didi

django - 超过 245 个字符长度的 Xapian 搜索词 : InvalidArgumentError: Term too long (> 245)

转载 作者:行者123 更新时间:2023-12-01 06:23:36 27 4
gpt4 key购买 nike

我在我的 django 应用程序中使用 Xapian 和 Haystack。我有一个模型,其中包含我想要索引以进行搜索的文本字段。该字段用于存储各种字符:words、urls、html等。

我正在使用默认的基于文档的索引模板:

text = indexes.CharField(document=True, use_template=True)

当有人粘贴了一个特别长的链接时,这有时会产生以下错误:
InvalidArgumentError: Term too long (> 245)

现在我明白了这个错误。我之前已经在其他情况下的其他领域解决了这个问题。

我的问题是, 处理此异常的首选方法是什么?

似乎处理这个异常需要我使用一个 prepare_text() 方法:
def prepare_text(self, obj):
content = []
for word in obj.body.split(' '):
if len(word) <= 245:
content += [word]
return ' '.join(content)

它只是看起来笨重并且容易出现问题。另外我不能使用搜索模板。

你是如何处理这个问题的?

最佳答案

我认为你做对了。在inkscape 上有一个补丁xapian_backend fork,灵感来自 xapian omega 项目。

我已经做了一些类似于你在我的项目中所做的事情,并使用了一些技巧来使用搜索索引模板:

# regex to efficiently truncate with re.sub
_max_length = 240
_regex = re.compile(r"([^\s]{{{}}})([^\s]+)".format(_max_length))

def prepare_text(self, object):

# this is for using the template mechanics
field = self.fields["text"]
text = self.prepared_data[field.index_fieldname]

encoding = "utf8"
encoded = text.encode(encoding)

prepared = re.sub(_regex, r"\1", encoded, re.UNICODE)

if len(prepared) != len(encoded):
return prepared.decode(encoding, 'ignore')

return text

关于django - 超过 245 个字符长度的 Xapian 搜索词 : InvalidArgumentError: Term too long (> 245),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30925487/

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